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规则,就可以不用再写一个专门针对于下一页的请求函数了

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)  然后 编写爬虫的代码

# -*- 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 连接提取器,提取urlallow : 可以写入正则表达式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框架的学习(9.Scrapy中的CrawlSpider类的作用以及使用,实现优化的翻页爬虫)相关推荐

  1. Scrapy框架的学习(2.scrapy入门,简单爬取页面,并使用管道(pipelines)保存数据)

    上个博客写了:  Scrapy的概念以及Scrapy的详细工作流程 https://blog.csdn.net/wei18791957243/article/details/86154068 1.sc ...

  2. Scrapy框架的学习(12. scrapy中的模拟登陆,发送post请求模拟登陆)

    1.在有的网站的的登录的界面上,有用户名以及输入密码的输入框 然后输入账号和密码进去,点击登录,后台就会把得到的数据发送过去,验证之后然后就登录成功了,就会跳转到 响应的登录之后的网站 2. 我们可以 ...

  3. Scrapy框架的学习(10.Scrapy中的模拟登陆(使用cookie模拟登陆))

    1. 为什么需要模拟登陆? 获取cookie,能够爬取登陆后的页面的数据 2.使用cookie模拟登陆的场景 (1) cookie过期时间很长,常见于一些不规范的网站 (2) 能在cookie过期之前 ...

  4. Scrapy框架的学习(4.scrapy中的logging模块记录日志文件以及普通的项目中使用)

    logging模块使用 为了让我们自己希望输出到终端的内容能容易看一些: 我们可以在setting中设置log级别 在setting中添加一行(全部大写):LOG_LEVEL = "WARN ...

  5. Scrapy框架的学习(8.scrapy中settings.py里面配置说明以及怎样设置配置或者参数以及怎样使用)

    1.settings.py里面的参数说明 每个参数其对应的官方得文档的网址 # -*- coding: utf-8 -*-# Scrapy settings for tencent project # ...

  6. Scrapy框架的学习(11.scrapy框架中的下载中间件的使用(DownloaderMiddlewares))

    1.Downloader Middlewares (下载中间键):引擎会先把Requets对象交给下载中间键再然后交给Downloader 2.使用方法: (1) 编写一个Downloader Mid ...

  7. Scrapy框架的学习(1.scrapy的概念以及scrapy的工作流程)

    scrapy的概念 1.为什么要学习Scrapy?  因为会让我们的爬虫更快.更强 2.什么是scrapy? (1) Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现 ...

  8. scrapy框架_Python学习之Scrapy框架

    爬虫界江湖地位No.1 说起Python,不得不说到它的爬虫应用,由于Python的短小精悍,用它来开发爬虫应用是最合适不过了,基于Python抓取网页的库有很多,例如requests,beatifu ...

  9. scrapy框架菜鸟学习记录

    scrapy框架菜鸟学习记录 scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架.其可以应用在数据挖掘,信息处理或储存历史数据等一系列的程序中.其最初是为了页面抓取(更确切的说,网络抓 ...

最新文章

  1. Apriori算法、FP-Growth算法、顺序分析、PrefixSpan算法
  2. android 4大组件相互启动,Android四大组件之Activity
  3. JavaSist之ClassPool
  4. 单片机 原子性操作_一款深藏功与名的国产单片机——F1C100A
  5. 《LeetcodeHot100非困难题补录》
  6. Win10系统电脑查看无线密码的方法
  7. 还服务器网站被k,导致网站被K的主要原因,看看你有没有中招!
  8. scala map与mapPartitions区别
  9. 开关电路的三极管特性
  10. 数维杯国际大学生数学建模挑战赛
  11. 【矩阵乘法】矩阵求和
  12. 测试小故事48:想当然
  13. 计算股票季度收益率、年收益率和相对收益率并可视化展示。
  14. 搭建L2TP-***
  15. 网页-如何控制台调试网页
  16. 关于项目的可行性分析
  17. 韩国PAYWAVE认证之技术篇2
  18. 如何理解WPF中的样式(Style)与模板ControlTemplate
  19. hadoop集群安装ES(ElasticSearch 5.0.2)
  20. python实现的按键精灵

热门文章

  1. Mysql事务与锁深入剖析
  2. pandas 索引_Pandas学习笔记03数据清洗(通过索引选择数据)
  3. 【JVM调优工具篇】使用MAT工具分析dump文件(查看GC Roots)
  4. java修改配置不重启,java运行时修改应用数据,通过jmx修改应用运行数据
  5. vue-cli css文件图片路径写法
  6. 牛客题霸 NC21 链表内指定区间反转
  7. Python——中国大学MOOC——神经网络与深度学习——Matblotlib绘图基础
  8. 《编译原理》实验预习报告——TINY语言的词法分析
  9. Bone Collector II
  10. linux脚本的数据输出到excel,使用shell实现Excel表格导出功能 | 剑花烟雨江南