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