scrapy 2.3 链接提取器

2021-06-10 15:43 更新

链接提取器是从响应中提取链接的对象。

这个 ​__init__​ 方法 ​LxmlLinkExtractor​ 获取确定可以提取哪些链接的设置。 ​LxmlLinkExtractor.extract_links​ 返回匹配的列表 ​Link​ 对象来自 ​Response​ 对象。

链接提取器用于 ​CrawlSpider​ 蜘蛛穿过一组 ​Rule​ 物体。

您也可以在普通的spider中使用链接提取器。例如,可以实例化 ​LinkExtractor​ 并从spider回调中使用它:

def parse(self, response):
    for link in self.link_extractor.extract_links(response):
        yield Request(link.url, callback=self.parse)

链接提取器引用

链接提取器类是 ​scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor​ . 为了方便起见,它也可以作为 ​scrapy.linkextractors.LinkExtractor​ ::

from scrapy.linkextractors import LinkExtractor

LxmlLinkExtractor

classscrapy.linkextractors.lxmlhtml.LxmlLinkExtractor(allow=()deny=()allow_domains=()deny_domains=()deny_extensions=Nonerestrict_xpaths=()restrict_css=()tags='a', 'area'attrs='href'canonicalize=Falseunique=Trueprocess_value=Nonestrip=True)

LXMLlinkextractor是推荐的带有便捷过滤选项的链接提取程序。它是使用LXML的健壮的HTMLParser实现的。

参数
  • allow (str or list) -- (绝对)URL必须匹配才能提取的单个正则表达式(或正则表达式列表)。如果没有给定(或为空),它将匹配所有链接。

  • deny (str or list) -- 一个单独的正则表达式(或正则表达式的列表),(绝对)URL必须匹配才能被排除(即不提取)。它优先于 allow 参数。如果未给定(或为空),则不会排除任何链接。

  • allow_domains (str or list) -- 包含用于提取链接的域的单个值或字符串列表。

  • deny_domains (str or list) -- 包含域的单个值或字符串列表,这些域不会被视为提取链接的域。

  • deny_extensions (list) -- 提取链接时应忽略的包含扩展名的字符串的单个值或列表。如果未给出,则默认为 scrapy.linkextractors.IGNORED_EXTENSIONS . .. 版本更改::2.0 IGNORED_EXTENSIONS 现在包括 7z , 7zip , apk , bz2 , cdr , dmg , ico , iso , tar , tar.gz , webm 和 xz .

  • restrict_xpaths (str or list) -- 是一个xpath(或xpath的列表),它定义响应中应该从中提取链接的区域。如果给定,则只扫描由这些xpath选择的文本中的链接。见下面的例子。

  • restrict_css (str or list) -- 一个CSS选择器(或选择器列表),它定义响应中应该从中提取链接的区域。行为与 restrict_xpaths .

  • restrict_text (str or list) -- 链接文本必须匹配才能提取的单个正则表达式(或正则表达式列表)。如果没有给定(或为空),它将匹配所有链接。如果给出了一个正则表达式列表,那么如果链接与至少一个匹配,则将提取该链接。

  • tags (str or list) -- 提取链接时要考虑的标记或标记列表。默认为 ('a', 'area') .

  • attrs (list) -- 在查找要提取的链接时应考虑的属性或属性列表(仅适用于在 tags 参数)。默认为 ('href',)

  • canonicalize (bool) -- 规范化每个提取的URL(使用w3lib.url.canonicalize_url)。默认为 False . 请注意,规范化URL用于重复检查;它可以更改服务器端可见的URL,因此对于使用规范化URL和原始URL的请求,响应可能不同。如果您使用linkextractor跟踪链接,那么保持默认链接更为可靠。 canonicalize=False .

  • unique (bool) -- 是否对提取的链接应用重复筛选。

  • process_value (collections.abc.Callable) -- 一种函数,接收从扫描的标记和属性中提取的每个值,并能修改该值并返回一个新值,或返回 None 完全忽略链接。如果没有给出, process_value 默认为 lambda x: x . …highlight::html例如,要从此代码中提取链接,请执行以下操作::<a href=“javascript:gotopage('../other/page.html');return false“>link text.<a>。highlight::python您可以在 process_value ::def process_value(value):m=re.search(“javascript:gotopage('(.*?)'”,value)如果m:返回m.group(1)

  • strip (bool) -- 是否从提取的属性中删除空白。根据HTML5标准,必须从 href 属性 <a> , <area> 还有许多其他元素, src 属性 <img> , <iframe> 元素等,因此linkextractor默认情况下会删除空格字符。集合 strip=False 关闭它(例如,如果从允许前导/尾随空格的元素或属性中提取URL)。

extract_links(response)

返回的列表 ​Link​ 来自指定的 ​response​ .

仅与传递给 __init__ 返回链接提取器的方法。

重复链接被省略。

链接

classscrapy.link.Link(urltext=''fragment=''nofollow=False)

Link对象表示LinkExtractor提取的链接。

使用下面的锚定标记示例来说明参数:

<a href="https://example.com/nofollow.html#foo" rel="external nofollow" target="_blank"  rel="nofollow">Dont follow this one</a>
参数
  • url -- 在定位标记中链接到的绝对url。从样本来看,这是 https://example.com/nofollow.html .

  • text -- 锚定标记中的文本。从样本来看,这是 Dont follow this one .

  • fragment -- url中哈希符号后面的部分。从样本来看,这是 foo .

  • nofollow -- 中存在或不存在nofollow值的指示 rel 定位标记的属性。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号