开发手册 欢迎您!
软件开发者资料库

Scrapy - 链接提取器

Scrapy链接提取器 - 从简单和简单的步骤学习Scrapy,从基本到高级概念,包括概述,环境,命令行工具,蜘蛛,选择器,项目,项目装载程序,外壳,项目管道,Feed导出,请求和响应,链接提取器,设置,例外,创建项目,定义项目,第一个蜘蛛,爬行,提取项目,使用项目,以下链接,Scraped数据,日志记录,统计信息收集,发送电子邮件,Telnet控制台,Web服务。

描述

如名称本身所示,链接提取器是用于使用 scrapy.http.Response 对象从网页中提取链接的对象.在Scrapy中,有内置的提取器,例如 scrapy.linkextractors import LinkExtractor .您可以通过实现一个简单的界面根据需要自定义您自己的链接提取器.

每个链接提取器都有一个名为 extract_links 的公共方法,其中包含一个Response对象和返回scrapy.link.Link对象的列表.您只能将链接提取器实例化一次并多次调用extract_links方法以提取具有不同响应的链接. CrawlSpiderclass使用链接提取器和一组规则,其主要目的是提取链接.

内置链接提取器的参考

通常链接提取器是与Scrapy分组并在scrapy.linkextractors模块中提供.默认情况下,链接提取器将是LinkExtractor,其功能与LxmlLinkExtractor相同;

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 = True, unique = True, process_value = None)

LxmlLinkExtractor 是一个强烈推荐的链接提取器,因为它有方便的过滤选项,它与lxml强大的HTMLParser一起使用.

Sr.No参数&描述
1

allow (正则表达式(或列表))

它允许单个表达式或一组表达式与url匹配要提取的.如果没有提及,它将匹配所有链接.

2

deny (正则表达式(或列表))

它阻止或排除应该与不提取的url匹配的单个表达式或表达式组.如果未提及或留空,则不会消除不需要的链接.

3

allow_domains (str或list)

<它允许单个字符串或字符串列表与要从中提取链接的域匹配.
4

deny_domains (str或list)

它阻止或排除单个字符串或字符串列表,这些字符串应与不从中提取链接的域匹配.

5

deny_extensions (list)

它在提取链接时阻止带有扩展名的字符串列表.如果未设置,则默认情况下将设置为 IGNORED_EXTENSIONS ,其中包含 scrapy.linkextractors 包中的预定义列表.

6

restrict_xpaths (str或list)

这是一个XPath列表区域,用于从响应中提取链接.如果给定,链接将仅从XPath选择的文本中提取.

7

restrict_css (str或list)

它的行为类似于restrict_xpaths参数,它将从响应中的CSS选定区域中提取链接.

8

tags (str或list)

提取链接时应考虑的单个标记或标记列表.默认情况下,它将是('a','area').

9

attrs (list)

单一提取链接时应考虑属性或属性列表.默认情况下,它将是('href',).

10

canonicalize (boolean)

提取的网址被带到使用 scrapy.utils.url.canonicalize_url 标准格式.默认情况下,它将为True.

11

unique(布尔值)

如果重复提取的链接,将使用它.

12

process_value (可调用)

这是一个从扫描的标签和属性接收值的函数.收到的值可能会被更改并返回,否则将不会返回任何内容来拒绝该链接.如果不使用,默认情况下它将是lambda x:x.

示例

以下代码用于提取链接 :

Link text

以下代码函数可用于process_value :

def process_value(val):    m = re.search("javascript:goToPage\('(.*?)'", val)    if m:       return m.group(1)