Link Extractors 适用于从网页(scrapy.http.Response)中抽取会被 follow 的链接的对象。

Scrapy 默认提供 2 种可用的 Link Extractor,但你可以通过实现一个简单的接口创建自己制定的 Link Extractor 来满足需求。Scrapy 提供了 from scrapy.contrib.linkextractors import LinkExtractor。

每个 LinkExtractor 有唯一的公共方法是 extract_links,其接收一个 Response 对象,并返回 scrapy.link.Link 对象。Link Extractors 只能实例化一次,其 extract_links 方法会根据不同的 Response 被调用多次来提取链接。

Link Extractors 在 CrawlSpider 类(在 Scrapy 可用)中使用。通过一套规则,你也可以用它在你的 Spider 中个,即使你不是从 CrawlSpider 继承的子类,因为它的目的很简单:提取链接。

内置 Link Extractor 参考

Scrapy 自带的 Link Extractors 类在 scrapy.contrib.linkextractors 模块提供。

默认的 link extractor 是 LinkExtractor ,其实就是 LxmlLinkExtractor:

from scrapy.contrib.linkextractors import LinkExtractor

在以前版本的 Scrapy 版本中提供了其他的 link extractor,不过都已经被废弃了。

LxmlLinkExtractor

class scrapy.contrib.linkextractors.lxmlhtml.LxmlLinkExtractor(allow=(), deny=(), allow_domains=(), deny_domains=(), deny_extensions=None, restrict_xpaths=(), tags=('a', 'area'), attrs=('href', ), canonicalize=True, unique=True, process_value=None)

LxmlLinkExtractor is the recommended link extractor with handy filtering options. It is implemented using lxml’s robust HTMLParser.

它接收来自扫描标签和属性提取每个值, 可以修改该值, 并返回一个新的,或返回 None 完全忽略链接的功能。如果没有给出,process_value 默认是 lambda x: x。

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

<a href="javascript:goToPage('../other/page.html'); return false">Link text</a>

你可以使用下面的这个 process_value 函数:

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

最新文章

  1. 疯狂JAVA16课之对象与内存控制
  2. 使用Cobbler无人值守安装CentOS6.5(一)
  3. okHttp使用
  4. Unity3d游戏场景优化杂谈(3)
  5. POJ 1365 Prime Land(数论)
  6. js实现各种常用排序算法
  7. Linux探秘之I/O效率
  8. Java Axis2 1.6.3+JDK1.7.0_13+Tomcat7.0.65+eclipse搭建web service
  9. GITHUB的初次使用
  10. GPIO 配置之ODR, BSRR, BRR 详解
  11. 命令行下上传文件到iOS软件 专业文件管理/gplayer
  12. 线程:Exchanger同步工具
  13. English is very important!
  14. Redis 实践1- redis介绍和安装
  15. Python——模块——fnmatch(文件名对比)
  16. JS 柯里化 (curry)
  17. mock.js的使用
  18. Perl 文件处理范例
  19. Angularjs的directive封装ztree
  20. shell 脚本中所有循环语法

热门文章

  1. 安装juicer
  2. 2.1-Java语言基础(keyword)
  3. war和war exploded的区别
  4. U盘装CentOS6.4
  5. Git笔记(pull/push)
  6. CSS-DOM
  7. Windosw系统——常见的问题
  8. mac安装mysql及workbench
  9. (二)活用ComponentScan
  10. 【转载】char*,const char*和string 三者转换