Scrapy 简明教程

Description

顾名思义,链接提取器是可以用于使用 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 一起使用。

Sr.No

Parameter & Description

1

allow (正则表达式(或列表))它允许一个单个表达式或表达式组与要提取的 url 匹配。如果未提及,它将匹配所有链接。

2

deny (正则表达式(或列表))它阻止或排除与不应提取的 url 匹配的一个表达式或表达式组。如果未提及或留空,则不会消除不需要的链接。

3

allow_domains (str 或列表)它允许一个单个字符串或字符串列表与要从中提取链接的域名匹配。

4

deny_domains (str 或列表)它阻止或排除与不应从中提取链接的域名匹配的一个单个字符串或字符串列表。

5

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

6

restrict_xpaths (str 或列表)它是 XPath 列表区域,从中提取链接的响应。如果给出,链接将仅从由 XPath 选定的文本中提取。

7

restrict_css (str 或列表)它的行为类似于 restrict_xpaths 参数,该参数将从响应中 CSS 选定的区域中提取链接。

8

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

9

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

10

canonicalize (布尔值)使用 scrapy.utils.url.canonicalize_url 将提取的 url 转换成标准形式。默认情况下,它将为 True。

11

unique (布尔型)如果提取的链接重复,此布尔型将被使用。

12

process_value (可调用)这是一个接收从扫描标签和属性中获取的值的函数。获取的值可被更改并返回,否则将不会返回任何内容以拒绝链接。如果未被使用,则默认值为 lambda x: x。

Example

以下代码用来提取链接 −

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