链接提取器¶
链接提取器是一个从响应中提取链接的对象。
__init__ 方法
LxmlLinkExtractor 接受设置,这些设置决定了可以提取哪些链接。LxmlLinkExtractor.extract_links 返回一个
匹配的 Link 对象列表,这些对象来自
Response 对象。
链接提取器用于CrawlSpider蜘蛛
通过一组Rule对象。
你也可以在常规爬虫中使用链接提取器。例如,你可以将
LinkExtractor 实例化为你的爬虫类中的一个类变量,并在你的爬虫回调中使用它:
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
Lxml链接提取器¶
- class scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor(allow=(), deny=(), allow_domains=(), deny_domains=(), deny_extensions=None, restrict_xpaths=(), restrict_css=(), tags=('a', 'area'), attrs=('href',), canonicalize=False, unique=True, process_value=None, strip=True)[源代码]¶
LxmlLinkExtractor 是推荐的链接提取器,具有方便的过滤选项。它是使用 lxml 的强大 HTMLParser 实现的。
- Parameters:
allow (str 或 list) – 一个单独的正则表达式(或正则表达式列表),(绝对) URL 必须匹配才能被提取。如果未给出(或为空),它将匹配所有链接。
deny (str 或 list) – 一个正则表达式(或正则表达式列表),(绝对) URL 必须匹配才能被排除(即不被提取)。它的优先级高于
allow参数。如果未给出(或为空),则不会排除任何链接。deny_domains (str 或 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 或 list) – 是一个XPath(或XPath列表),它定义了响应中应从中提取链接的区域。如果提供了,则只会扫描由这些XPath选择的文本以查找链接。
restrict_css (str 或 list) – 一个CSS选择器(或选择器列表),用于定义响应中应从中提取链接的区域。与
restrict_xpaths的行为相同。restrict_text (str 或 list) – 一个单独的正则表达式(或正则表达式列表),链接的文本必须匹配才能被提取。如果未提供(或为空),则将匹配所有链接。如果提供了正则表达式列表,只要链接匹配其中至少一个,就会被提取。
attrs (list) – 在查找要提取的链接时应考虑的一个属性或属性列表(仅适用于在
tags参数中指定的标签)。默认为('href',)canonicalize (bool) – 对每个提取的URL进行规范化(使用 w3lib.url.canonicalize_url)。默认为
False。 请注意,canonicalize_url 用于重复检查; 它可能会改变服务器端可见的URL,因此对于规范化和原始URL的请求,响应可能会有所不同。如果您 使用 LinkExtractor 来跟踪链接,保持默认的canonicalize=False更为稳健。unique (bool) – 是否应对提取的链接应用重复过滤。
process_value (collections.abc.Callable) –
一个函数,它接收从标签和扫描的属性中提取的每个值,并可以修改该值并返回一个新的值,或者返回
None以完全忽略该链接。如果未提供,process_value默认为lambda x: x。例如,要从以下代码中提取链接:
<a href="javascript:goToPage('../other/page.html'); return false">Link texta>
你可以在
process_value中使用以下函数:def process_value(value): m = re.search(r"javascript:goToPage\('(.*?)'", value) if m: return m.group(1)
strip (bool) – 是否从提取的属性中去除空白字符。 根据HTML5标准,必须从
href属性(如、等元素)和src属性(如、等元素)中去除前导和尾随的空白字符,因此LinkExtractor默认会去除空白字符。 设置strip=False以关闭此功能(例如,如果您从允许前导/尾随空白字符的元素或属性中提取URL)。
链接¶
- class scrapy.link.Link(url: str, text: str = '', fragment: str = '', nofollow: bool = False)[源代码]¶
链接对象表示由LinkExtractor提取的链接。
使用下面的锚标签示例来说明参数:
<a href="https://example.com/nofollow.html#foo" rel="nofollow">Dont follow this one</a>
- Parameters:
url – 锚标签中链接到的绝对URL。 从示例中,这是
https://example.com/nofollow.html。text – 锚点标签中的文本。从示例中可以看出,这是
Dont follow this one。fragment – URL中哈希符号后的部分。在示例中,这是
foo。nofollow – 表示在锚标签的
rel属性中是否存在nofollow值的指示。