Scrapy框架的学习(9.Scrapy中的CrawlSpider类的作用以及使用,实现优化的翻页爬虫)
1.CrawlSpider类通过一些规则(rules),使对于链接(网页)的爬取更具有通用性,
换句话说,CrawlSpider爬虫为通用性的爬虫,
而Spider爬虫更像是为一些特殊网站制定的爬虫。它基于Spider并有一些独特属性
rules: 是Rule对象的集合,用于匹配目标网站并排除干扰
parse_start_url: 用于爬取起始响应,必须要返回Item
2. Scrapy中的爬虫方法继承四种类来建立我们的scrapy爬虫,
他们是:Spider类,CrawlSpider类, CSVFeedSpider类和XMLFeedSpider类
3. 通过命令的方式生成一个CrawlSpider类的模板
scrapy genspider -t crawl 爬虫 域名
4. 通过爬取这个网站http://bxjg.circ.gov.cn/web/site0/tab5240/module14430/page1.htm 来使用CrawlSpider类进行爬虫
(1)创建好项目后,创建爬虫(加入了-t crawl) scrapy genspider -t crawl punish bxjg.circ.gov.cn
(2) 可以使用rules规则,就可以不用再写一个专门针对于下一页的请求函数了
[code]rules = ( Rule(LinkExtractor(allow=r'/web/site0/tab5240/info\d+\.htm'), callback='parse_item'), Rule(LinkExtractor(allow=r'/web/site0/tab5240/module14430/page\d+\.htm'),follow=True), )LinkExtractor 连接提取器,提取url
参数:
url allow : 可以写入正则表达式
callback: 提取出来的url地址的response交给callback处理 ,需要时再用,一般对应的网站详情页面要使用
follow: 表示当前的url地址的响应是否重新经过rules来提取url地址,需要时再用
(3) 然后 编写爬虫的代码
[code]# -*- coding: utf-8 -*- import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule import re '''继承spider的crawlspider类''' class PunishSpider(CrawlSpider): name = 'punish' allowed_domains = ['bxjg.circ.gov.cn'] start_urls = ['http://bxjg.circ.gov.cn/web/site0/tab5240/module14430/page1.htm'] ''' 可以定义提取url地址的规则 LinkExtractor 连接提取器,提取url allow : 可以写入正则表达式 callback: 提取出来的url地址的response交给callback处理 follow: 表示当前的url地址的响应是否重新经过rules来提取url地址 ''' rules = ( Rule(LinkExtractor(allow=r'/web/site0/tab5240/info\d+\.htm'), callback='parse_item'), Rule(LinkExtractor(allow=r'/web/site0/tab5240/module14430/page\d+\.htm'),follow=True), ) '''与Spider类不同,CrawlSpider类中的parse函数有特殊功能,不能定义''' def parse_item(self, response): item = {} item['title'] = re.findall("<!--TitleStart-->(.*?)<!--TitleEnd-->",response.body.decode())[0] item['publish_date'] = re.findall("发布时间:(20\d{2}-\d{2}-\d{2})",response.body.decode())[0] print(item)(4) 在setting.py里面设置 LOG_LEVEL = "WARNING" 以及开启并设置 USER_AGENT,然后在终端运行程序
scrapy crawl punish
(5) LinKExtractor更多常见的参数:
5. 再请求详情页的时候,我们也可以使用在Spider类中一样,
通过 yield scrapy.Request() 方法也可以实现,但是代码会写的比使用Crawlspider类中的多
- Scrapy爬虫框架学习之使用start_requests函数实现用户登录
- Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
- Python爬虫scrapy框架发送POST请求以及自定义中间件(使用Cookie池,获取Cookie)——登录,爬取微博
- 爬虫Scrapy框架之学习使用(二):DownloaderMiddleWares
- Python爬虫框架Scrapy 学习笔记 5 ------- 使用pipelines过滤敏感词
- Scrapy爬虫框架学习笔 二 CrawlSpider的使用
- Scrapy框架学习 - 使用Twisted框架实现异步存储数据到MySQL数据库中
- 爬虫Scrapy框架之学习使用(一)
- 爬虫Scrapy框架之学习使用(三):信号(Signals)
- Scrapy框架学习(三)----基于Scrapy框架实现的简单爬虫案例
- [爬虫入门]Python中使用scrapy框架实现图片爬取
- 基于Python使用scrapy-redis框架实现分布式爬虫 注
- Scrapy爬虫框架之使用第三方库fake_useragent实现随机请求头
- Android之Volley框架使用优化--单例模式实现请求队列
- python爬虫框架scrapy学习笔记
- Python爬虫框架Scrapy安装使用步骤
- ios开发网络学习二:URL转码以及字典转模型框架MJExtension的使用
- PHP_thinkphp框架使用PHPMailer实现发送邮件的功能,以及各种问题解析
- 使用Python的Scrapy框架编写web爬虫的简单示例