scrapy基本使用:
创建工程:scrapy startproject 工程名
进入到工程后,在终端创建爬虫
创建爬虫:scrapy genspider 爬虫名 爬虫的地址
执行爬虫:scrapy crawl 爬虫名
配置settings.py:
不遵从robots协议
ROBOTSTXT_OBEY = False
进行UA伪装
```USER_AGENT``
进行日志等级设定 : LOG_LEVEL='ERROR'
持久化储存:
基于终端命令:
特性:只可以将parse方法返回的值存储到本地磁盘
指令:scrapy crawl dmoz -o douban.json -t json
o 后面是导出文件名,-t 后面是导出类型
可保存格式:JSON,JSON lines,CSV,XML
基于管道:实现流程
1.数据解析
2.在item类定义相关属性
3.将解析的数据存储或封装到一个item类型的对象
4.向管道提交item
5.在管道文件的process_item方法中接受item进行持久化存储
6.配置文件开启管道 setting.py ITEM_PIPELINES
将同一份数据持久化到不同的平台中
分析:
1.管道文件中的一个管道类负责数据的一种形式的持久化存储
2.爬虫文件向管道提交的item只会提交给优先级最高的那一类管道
3.在管道类的process_item中的return item表示的是将当前管道接受的item返回、提交给下一个即将被执行的管道类
五大核心组件
- 引擎(Scrapy)
- 用来处理整个系统的数据流处理, 触发事务(框架核心)
- 调度器(Scheduler)
- 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
- 下载器(Downloader)
- 用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)
- 爬虫(Spiders)
- 爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面
- 项目管道(Pipeline)
- 负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。
基于scrapy进行图片数据·爬取
在爬虫文件中只需要解析提取出图片的地址,然后将地址提交给管道
在配置文件中配置:IMAGES_STORE = './imgsLib'
在管道文件中进行管道类的定制:
1.from scrapy.pipelines.images import ImagesPipeline
2.将管道类的父类修改成 ImagesPipline 或者重新定义类
3.重写父类三方法
提高scrapy的爬取效率
增加并发:
框架默认开启32个并发线程,可以适当增加,在setting配置文件中修改CONCURRENT_REQUESTS
降低日志级别:
在运行框架时,会有大量日志信息输出,为了减少cpu的使用率。可以设置log输出信息为INFO或者ERROR 在配置文件中编写COOKIES_ENABLED = False
禁止重试:对失败的HTTP请求重试会减慢爬取速度,RETRY_ENABLED = False
减少下载超时:如果对一个非常慢的链接进行爬取,减少下载超时可以能让卡主的链接快速被放弃,从而提升效率。在配置文件中进行编写DOWNLOAD_TIMEORT = 10
超时时间为10s
增量式爬虫
-增量式爬虫
-概念:监测网站数据更新的情况
-核心:去重!!数据库储存之储存更新的
-深度爬取类型的网站中需要对详情页的url进行记录和检测
-记录:将爬取过的详情页url进行记录保存
-url存储到redis的set中
-检测:对某一个详情url进行发请求之前先去redis中查看是否有当前url,有的话就意味该url已经爬取过了
数据指纹