博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python爬虫scrapy之rules的基本使用
阅读量:4652 次
发布时间:2019-06-09

本文共 1887 字,大约阅读时间需要 6 分钟。

Link Extractors

Link Extractors 是那些目的仅仅是从网页( 对象)中抽取最终将会被follow链接的对象。

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

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

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

上面都是官网解释,看看就行了,这个Rule啊其实就是为了爬取全站内容的写法,首先我们继承的就不是scrapy.spider类了,而是继承CrawlSpider这个类,看源码就回明白CrawlSpider这个类也是继承scrapy.spider类。

  具体参数:

  allow:这里用的是re过滤,我们其实就是start_urls加上我们这个匹配到的具体链接下的内容。    LinkExtractor:故名思议就是链接的筛选器,首先筛选出来我们需要爬取的链接。

  deny:这个参数跟上面的参数刚好想反,定义我们不想爬取的链接。

  follow:默认是false,爬取和start_url符合的url。如果是True的话,就是爬取页面内容所有的以start_urls开头的url。

  restrict_xpaths:使用xpath表达式,和allow共同作用过滤链接。还有一个类似的restrict_css 

  callback:定义我们拿到可以爬取到的url后,要执行的方法,并传入每个链接的response内容(也就是网页内容)

  注意:rule无论有无callback,都由同一个_parse_response函数处理,只不过他会判断是否有follow和callback

from scrapy.spiders.crawl import Rule, CrawlSpiderfrom scrapy.linkextractors import LinkExtractor

  

示例:

from whole_website.items import DoubanSpider_Bookfrom scrapy.spiders.crawl import Rule, CrawlSpiderfrom scrapy.linkextractors import LinkExtractorclass DoubanSpider(CrawlSpider):    name = "douban"    allowed_domains = ["book.douban.com"]    start_urls = ['https://book.douban.com/']    rules = [        Rule(LinkExtractor(allow='subject/\d+'),callback='parse_items)    ]    def parse_items(self, response):        items = DoubanSpider_Book()        items['name'] = response.xpath('//*[@id="wrapper"]/h1/span/text()').extract_first()        items['author'] = response.xpath('//*[@id="info"]//a/text()').extract()        data = {'book_name':items['name'],                'book_author':items['author']                }        print(data)

  

 

 

 

参考地址:http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/link-extractors.html

转载于:https://www.cnblogs.com/lei0213/p/7976280.html

你可能感兴趣的文章
BZOJ 1260&UVa 4394 区间DP
查看>>
CentOS或Redhat上装memcached (包括64位系统)
查看>>
C 字符串数组排序
查看>>
ios开发学习--列表(Table)效果源码分享--系列教程4
查看>>
Modified判断Tedit TMemo类型的文件是否修改过
查看>>
python基础-对象
查看>>
如何使函数不生成执行代码
查看>>
MySQL 数据库设计 笔记与总结(3)物理设计
查看>>
第5周团队作业1:项目建议
查看>>
抠图划线
查看>>
HDU 4897 Little Devil I(树链剖分)(2014 Multi-University Training Contest 4)
查看>>
jmeter 参数化学习笔记
查看>>
Convert the AScii to SAC file
查看>>
PAT (Basic Level) Practise 1002. 写出这个数
查看>>
SxsTrace
查看>>
How to correctly use preventDefault(), stopPropagation(), or return false; on events
查看>>
How to: Update an .edmx File when the Database Changes
查看>>
纯CSS3绘制的猫咪老师——献给喜欢CSS3及《夏目友人帐》的你
查看>>
Mysql卸载
查看>>
Android事件分发机制
查看>>