Scrapy
2.5

第一步

  • Scrapy一目了然
  • 安装指南
  • Scrapy 教程
  • 实例

基本概念

  • 命令行工具
  • 蜘蛛
  • 选择器
  • 项目
  • 项目加载器
  • Scrapy shell
  • 项目管道
  • Feed 导出
  • 请求和响应
  • 链接提取器
    • 链接提取器引用
      • LxmlLinkExtractor
      • 链接
  • 设置
  • 例外情况

内置服务

  • 登录
  • 统计数据集合
  • 发送电子邮件
  • 远程登录控制台
  • Web服务

解决具体问题

  • 常见问题
  • 调试spiders
  • 蜘蛛合约
  • 常用做法
  • 宽爬行
  • 使用浏览器的开发人员工具进行抓取
  • 选择动态加载的内容
  • 调试内存泄漏
  • 下载和处理文件和图像
  • 部署蜘蛛
  • AutoThrottle 扩展
  • 标杆管理
  • 作业:暂停和恢复爬行
  • 协同程序
  • asyncio

扩展Scrapy

  • 体系结构概述
  • 下载器中间件
  • 蜘蛛中间件
  • 扩展
  • 核心API
  • 信号
  • 调度程序
  • 条目导出器

其余所有

  • 发行说明
  • 为 Scrapy 贡献
  • 版本控制和API稳定性
Scrapy
  • »
  • 链接提取器

链接提取器¶

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

这个 __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¶

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实现的。

参数
  • 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__ 返回链接提取器的方法。

重复链接被省略。

链接¶

class scrapy.link.Link(url, text='', fragment='', nofollow=False)[源代码]¶

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

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

<a href="https://example.com/nofollow.html#foo" 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 定位标记的属性。

Previous Next

© 版权所有 2008–2021, Scrapy developers. 最后更新于 10月 27, 2021.

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