Scrapy - 链接提取器


描述

顾名思义,链接提取器是用于使用scrapy.http.Response对象从网页中提取链接的对象。在Scrapy中,有内置的提取器,例如scrapy.linkextractors import 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

允许(正则表达式(或列表))

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

2

拒绝(正则表达式(或列表))

它会阻止或排除应与不提取的 url 相匹配的单个表达式或表达式组。如果没有提及或留空,则不会消除不需要的链接。

3

allowed_domains(字符串或列表)

它允许单个字符串或字符串列表与要从中提取链接的域相匹配。

4

Deny_domains(字符串或列表)

它阻止或排除应与不从中提取链接的域相匹配的单个字符串或字符串列表。

5

拒绝扩展(列表)

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

6

limit_xpaths(字符串或列表)

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

7

limit_css(字符串或列表)

它的Behave类似于restrict_xpaths参数,该参数将从响应内的CSS选定区域中提取链接。

8

标签(字符串或列表)

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

9

属性(列表)

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

10

规范化(布尔值)

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

11

唯一(布尔值)

如果提取的链接重复,则会使用它。

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)