-
基于Spider父类进行全站数据的爬取
- 全站数据的爬取:将所有页码对应的页面数据进行爬取
- 手动请求的发送(get):
yield scrapy.Request(url,callback) - 对yield的总结:
- 向管道提交item对象 yield item
- 手动请求发送 yield scrapy.Request(url,callback)
- 手动发起post请求:
yield scrapy.FormRequest(url,formdata,callback) formdata是一个字典(请求数据)
-
scrapy五大核心组件
- 引擎(Scrapy)
- 用来处理整个系统的数据流处理,触发事务(框架核心)
- 爬虫(Spiders)
- 主要干活的,用于从特定网页中提取自己需要的信息,即所谓的实体(item),用户也可以从中提取出链接,让Srapy进一步爬取
- 调度器(Scheduler)
- 用来接收引擎发货来的请求,压入队列中,在引擎再次请求的时候返回.url的优先队列,由它调度下一个要抓取的网站,同时去重
- 下载器(Downloader)
- 用于下载网页内容,并将网页内容返回给Spider(异步的主要体现,基于twisted实现)
- 管道(Pipeline)
- 负责处理爬虫从网页中抽取的实体,主要的功能是持久化存储,验证实体的有效性,清除不需要的信息
- 引擎(Scrapy)
-
scrapy的请求传参
- 作用: 实现深度爬取
- 使用场景: 如果使用scrapy爬取的数据没有存在同一张页面
- 传递item: yield scrapy.Request(url,callback,meta={'item':item})
- 接收item: response.meta
-
提升scrapy爬取数据的效率
- 在配置文件settings.py中进行相关的配置
增加并发:
默认scrapy开启的并发线程为32个,可以适当增加.
CONCURRENT_REQUESTS = 100 (将并发设置为100)
降低日志级别:
LOG_LEVEL = 'INFO'
禁止cookie:
如果不是真的需要cookie,可以禁止cookie来减少CPU的使用率
COOKIES_ENABLED = False
禁止重试:
对失败的HTTP进行重新请求会减慢爬取速度
RETRY_ENABLED = False
减少下载超时:
如果对一个非常慢的链接进行爬取,减少下载超时可以让被卡住的链接快速放弃
DOWNLOAD_TIMEOUT = 10 (超时时间为10s)
- 在配置文件settings.py中进行相关的配置
-
scrapy中间件
- 爬虫中间件(引擎和爬虫之间)
- 下载中间件(引擎和下载器之间) ***
- 作用:批量拦截所有的请求和响应
- 为什么拦截请求?
- 篡改请求头信息(UA伪装)
- 修改请求对应ip(代理)
- 篡改请求的url
- 为什么拦截响应?
- 篡改响应数据
- 篡改响应对象 *
-
selenium在scrapy中的使用流程
- 在爬虫类中定义一个bro的属性,就是实例化的浏览器对象
- 在爬虫类中重写父类的一个closed(self,spider),用来关闭浏览器
- 在中间件中进行浏览器自动化的操作