scrapy 2.3 链接提取器
链接提取器是从响应中提取链接的对象。
这个 __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.0IGNORED_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)。
链接
- 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
定位标记的属性。