Scrapy – 链接提取器

Scrapy – 链接提取器

描述

顾名思义,链接提取器是使用 scrapy.http.Response 对象从网页上提取链接的对象。在Scrapy中,有一些内置的提取器,如 scrapy.linkextractors 导入 LinkExtractor。 你可以根据自己的需要,通过实现一个简单的接口来定制自己的链接提取器。

每个链接提取器都有一个名为 extract_links 的公共方法,它包括一个Response对象,并返回一个scrapy.link.Link对象的列表。你可以只实例化一次链接提取器,并多次调用extract_links方法来提取具有不同响应的链接。CrawlSpiderclass使用带有一组规则的链接提取器,其主要目的是提取链接。

内置链接提取器的参考

通常情况下,链接提取器与Scrapy分组,并在scrapy.linkextractors模块中提供。默认情况下,链接提取器是LinkExtractor,其功能与LxmlLinkExtractor相同。

from scrapy.linkextractors import LinkExtractor

LxmlLinkExtractor

class scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor(allow = (), deny = (), 
   allow_domains = (), deny_domains = (), deny_extensions = None, restrict_xpaths = (), 
   restrict_css = (), tags = ('a', 'area'), attrs = ('href', ), 
   canonicalize = True, unique = True, process_value = None)

LxmlLinkExtractor 是一个强烈推荐的链接提取器,因为它有方便的过滤选项,而且它与lxml的强大的HTMLParser一起使用。

序号 参数和描述
1 allow (a regular expression (or list of)) 它允许一个单一的表达式或一组表达式来匹配要提取的url。如果没有提到,它将匹配所有的链接。
2 **deny ** (正则表达式(或列表))它阻止或排除一个单一的表达式或一组表达式,这些表达式应该与不被提取的url相匹配。如果它没有被提及或留空,那么它将不会消除不需要的链接。
3 allow_domains (str or list) 它允许一个单一的字符串或字符串列表,应该与要提取的链接的域相匹配。
4 deny_domains (str or list) 它阻止或排除一个单独的字符串或字符串列表,这些字符串应与不被提取链接的域相匹配。
5 deny_extensions (list) 它在提取链接时阻止带有扩展名的字符串列表。如果没有设置,则默认为 IGNORED_EXTENSIONS ,它包含 scrapy.linkextractors 包中预定义的列表。
6 restrict_xpaths (str or list) 它是一个XPath列表区域,将从响应中提取链接。如果给出,链接将只从XPath选择的文本中提取。
7 restrict_css (str or list) 它的作用类似于restrict_xpaths参数,将从响应中选定的CSS区域提取链接。
8 tags (str or list) 提取链接时应考虑的单个标签或标签列表。默认情况下,它将是(’a’, ‘area’)。
9 attrs (list) 在提取链接时应该考虑的单个属性或属性列表。默认情况下,它将是(’href’,)。
10 canonicalize (boolean) 使用 scrapy.utils.url.canonicalize_url 将提取的url变为标准形式 默认情况下,它将是True。
11 unique (boolean) 如果提取的链接是重复的,它将会被使用。
12 process_value (可调用) 它是一个函数,从扫描的标签和属性中接收一个值。收到的值可以被改变并返回,否则将不返回任何东西来拒绝该链接。如果不使用,默认情况下它将是lambda x: x。

例子

下面的代码用于提取链接 —

<a href = "javascript:goToPage('../other/page.html'); return false">Link text</a>

下面的代码函数可以在process_value中使用-

def process_value(val): 
   m = re.search("javascript:goToPage\('(.*?)'", val) 
   if m: 
      return m.group(1) 

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程