Scrapy
2.12

第一步

  • Scrapy 概览
  • 安装指南
  • Scrapy 教程
  • Examples

基本概念

  • 命令行工具
  • Spiders
  • Selectors
  • Items
  • Item Loaders
  • Scrapy shell
  • Item Pipeline
  • Feed exports
  • 请求和响应
  • Link Extractors
    • 链接提取器参考
      • LxmlLinkExtractor
        • LxmlLinkExtractor
      • Link
        • Link
  • 设置
  • 异常

内置服务

  • 日志记录
  • 统计收集
  • 发送电子邮件
  • Telnet 控制台

解决特定问题

  • 常见问题解答
  • 调试爬虫
  • Spiders Contracts
  • 常见实践
  • Broad Crawls
  • 使用浏览器的开发者工具进行抓取
  • 选择动态加载的内容
  • 调试内存泄漏
  • 下载和处理文件和图像
  • 部署爬虫
  • AutoThrottle 扩展
  • 基准测试
  • 任务:暂停和恢复爬取
  • Coroutines
  • asyncio

扩展Scrapy

  • 架构概述
  • Add-ons
  • 下载器中间件
  • Spider Middleware
  • Extensions
  • Signals
  • Scheduler
  • Item Exporters
  • Components
  • Core API

其余所有

  • 发布说明
  • 为Scrapy做贡献
  • 版本控制和API稳定性
Scrapy
  • Link Extractors
  • View page source

链接提取器¶

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

__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 参数。如果未给出(或为空),则不会排除任何链接。

  • allow_domains (str 或 list) – 单个值或包含域的字符串列表,这些域将被考虑用于提取链接

  • 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) – 一个单独的正则表达式(或正则表达式列表),链接的文本必须匹配才能被提取。如果未提供(或为空),则将匹配所有链接。如果提供了正则表达式列表,只要链接匹配其中至少一个,就会被提取。

  • 标签 (str 或 list) – 提取链接时要考虑的标签或标签列表。 默认为 ('a', 'area')。

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

extract_links(response: TextResponse) → list[Link][源代码]¶

从指定的response返回一个Link对象列表。

只有与传递给链接提取器的__init__方法的设置匹配的链接才会被返回。

如果unique属性设置为True,则重复的链接将被省略,否则它们将被返回。

链接¶

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值的指示。

Previous Next

© 版权所有 Scrapy 开发者。 最后更新于 2024年11月19日。

Built with Sphinx using a theme provided by Read the Docs.