Scrapy - 链接提取器



描述

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

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

内置链接提取器参考

通常,链接提取器与 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(正则表达式(或列表))

它允许一个表达式或一组表达式与要提取的URL匹配。如果未提及,它将匹配所有链接。

2

deny(正则表达式(或列表))

它阻止或排除一个表达式或一组表达式,这些表达式不应与要提取的URL匹配。如果未提及或留空,则不会消除不需要的链接。

3

allow_domains(字符串或列表)

它允许一个字符串或字符串列表,这些字符串应与要从中提取链接的域名匹配。

4

deny_domains(字符串或列表)

它阻止或排除一个字符串或字符串列表,这些字符串应与不应从中提取链接的域名匹配。

5

deny_extensions(列表)

在提取链接时,它会阻止带有扩展名的字符串列表。如果未设置,则默认情况下它将设置为IGNORED_EXTENSIONS,其中包含scrapy.linkextractors包中的预定义列表。

6

restrict_xpaths(字符串或列表)

它是从响应中提取链接的XPath区域列表。如果给出,则仅从XPath选择的文本中提取链接。

7

restrict_css(字符串或列表)

它的行为类似于restrict_xpaths参数,它将从响应内的CSS选择区域提取链接。

8

tags(字符串或列表)

提取链接时应考虑的单个标签或标签列表。默认情况下,它将为(’a’,’area’)。

9

attrs(列表)

提取链接时应考虑的单个属性或属性列表。默认情况下,它将为(’href’,)。

10

canonicalize(布尔值)

使用scrapy.utils.url.canonicalize_url将提取的URL转换为标准格式。默认情况下,它将为True。

11

unique(布尔值)

如果提取的链接重复,它将被使用。

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) 
广告

© . All rights reserved.