学科分类
目录
网络爬虫

通过LinkExtractor类提取链接

LinkExtractor类的唯一目的就是从网页中提取需要跟踪爬取的链接。它按照规定的提取规则来提取链接,这个规则只适用于链接,不适用于普通文本。

Scrapy框架在scrapy.linkextractors模块中提供了LinkExtractor类专门用于表示链接提取类,但是我们也可以自定义一个符合特定需求的链接提取类,只需要让它实现一个简单的接口即可。

每个LinkExtractor都需要保护一个公共方法extract_links(),该方法接收一个 Response对象做为参数,并返回一个元素类型为scrapy.link.Link的列表。在爬虫工作过程中,链接提取类只需要实例化一次,但是会从响应对象中提取链接时会多次调用extract_links()方法。

链接提取类一般与若干Rules结合一起用于CrawlSpider类中,但是在其它与CrawlSpider类无关的场合也可以使用该类提取链接。

在Scrapy框架中默认的链接提取类是LinkExtractor类,它其实是对scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor类的引用,所以这两个类是等价的。在Scrapy框架的早期版本中曾经出现过其它链接提取类,但是都被弃用了。

LinkExtractor类的构造方法如下所示。

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

它包含了多个参数,主要的参数包括:

  • allow:其值为一个或多个正则表达式组成的元组,只有匹配这些正则表达式的URL才会被提取。如果allow参数为空,则会匹配所有链接。

  • deny:其值为一个或多个正则表达式组成的元组,满足这些正则表达式的URL会被排除不被提取(优先级高于allow参数)。如果deny参数为空,则不会排除任何URL。

  • allow_domains:其值是一个或多个字符串组成的元组,表示会被提取的链接所在的域名。

  • deny_domains:其值是一个或多个字符串组成的元组,表示被排除不提取的链接所在的域名。

  • restrict_xpaths:其值是一个或多个xpath表达式组成的元组,表示只在符合该xpath定义的文字区域搜寻链接。

  • tags:用于识别要提取的链接标签,默认值为('a','area')。

  • attrs:其值是一个或多个字符串组成的元组,表示在提取链接时要识别的属性(仅当该属性在tags规定的标签里出现时),默认值是('href')。

  • canonicalize:表示是否将提取到的URL标准化,默认值为False。由于使用标准化后的URL访问服务器与使用原URL访问得到的结果可能不同,所以最好保持使用它的默认值False。

  • unique:表示是否要对提取的链接进行去重过滤,默认值为True。

  • process_value:负责对提取的链接进行处理的函数,能够对链接进行修改并返回一个新值,如果返回None则忽略该链接。如果不对process_value参数赋值,则使用它的默认值“lambda x: x”。

  • deny_extensions:其值是一个字符串或者字符串列表,表示提取链接时应被排除的文件扩展名。例如,['bmp', 'gif', 'jpg',]表示排除包含有这些扩展名的URL地址。

  • restrict_css:其值是一个或多个css表达式组成的元组,表示只在符合该css定义的文字区域搜寻链接。

  • strip:表示是否要将提取的链接地址前后的空格去掉,默认值为True。

点击此处
隐藏目录