链接提取器

链接提取器是唯一目的是从网页(scrapy.http.Response对象)中提取链接的对象,这将最终被遵循。

Scrapy中提供了scrapy.linkextractors.LinkExtractor,但您可以通过实现简单的界面,创建自己的定制链接提取器来满足您的需求。

每个链接提取器的唯一公共方法是extract_links,它接收一个Response对象并返回一个scrapy.link.Link对象列表。链接提取器意在被实例化一次,并且它们的extract_links方法被多次调用不同的响应来提取链接。

链接提取器用于CrawlSpider类(可在Scrapy中使用),通过一组规则,但您也可以在蜘蛛中使用它,即使您不从CrawlSpider进行子类化,因为其目的非常简单:提取链接。

内置链接提取器参考

与Scrapy捆绑在一起的链接提取器类在scrapy.linkextractors模块中提供。

默认链接提取器是LinkExtractor,与LxmlLinkExtractor相同:

从scrapy.linkextractors导入LinkExtractor

以前的Scrapy版本中曾经有其他链接提取器类,但现在已被弃用。

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(正则表达式(或列表)) - (绝对)URL必须匹配才能被提取的单个正则表达式(或正则表达式列表)。如果没有给出(或空),它将匹配所有链接。

deny(正则表达式(或列表)) - (绝对)URL必须匹配以排除(即未提取)的单个正则表达式(或正则表达式列表)。它优先于allow参数。如果没有给出(或空),它不会排除任何链接。

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

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

deny_extensions(list) - 单个值或包含在提取链接时应忽略的扩展名的字符串列表。如果没有给出,它将默认为scrapy.linkextractors包中定义的IGNORED_EXTENSIONS列表。

restrict_xpaths(str或list) - 是一个XPath(或XPath的列表),它定义响应中应该提取链接的区域。如果给出,只有XPath所选择的文本将被扫描链接。见下面的例子。

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

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

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

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

unique(boolean) - 是否应将重复过滤应用于提取的链接。

process_value(可调用) -

接收从标签提取的每个值和扫描的属性的函数,并且可以修改该值并返回一个新的值,或者返回None以忽略该链接。如果没有给出,process_value默认为lambda x:x。

例如,从此代码中提取链接:

<a href="javascript:goToPage('../other/page.html'); return false">链接文字</a>

您可以在process_value中使用以下函数:

def process_value(value):

m = re.search(“javascript:goToPage \('(。\*?)'”,value)

如果m:

    返回m.group(1)

strip(boolean) - 是否从提取的属性中删除空格。根据HTML5标准,必须从<a>,<area>和许多其他元素的href属性,<img>,<iframe>元素等的src属性中删除前导和尾随空格,因此LinkExtractor默认将空格字符。设置strip = False将其关闭(例如,如果要从允许前导/尾随空格的元素或属性中提取URL)。

results matching ""

    No results matching ""