疾风_lu 阅读(15) 评论(0)

前言:目标确定

(1)、创建项目

scrapy startproject qsbk

(2)、技术路线

scrapy框架的使用

(3)、创建爬虫

scrapy genspider spider qiushibaike.com (爬虫名不能与项目名重名)

(3)、实战

改写settings.py

设置请求头模拟浏览器访问行为

不遵从robots.txt行为

限定下载速度

启用pipelines,如有多个pipelines,数字小表示优先级越高

改写items.py

 改写pipelines.py

改写spider.py

(5)、效果展示

我们本次一共抓取到了325条数据

(6)、总结(全爬虫流程分析)

1、我们在spider中传入了初始url,并通过引擎传递给scheduler调度队列生成request请求并通过downloader middleware 进入downloader从互联网上下载数据,返回一个response对象,response是一个scrapy.http.response.html.HtmlResponse对象,可以通过css和xpath语法来提取数据

2、提取出的数据是一个Selector or SelectorList对象,并通过downloader middle 经引擎传递给spider中的parse函数进行解析,我们通过getall()获取了字符串文本,列表类型,get()方法返回第一个值,str类型,这里我们亦可使用extract()返回的是列表类型,extract_first()返回列表中的第一个值,str类型

3、解析后我们使用yield将函数转换为一个生成器,不断的从中抽数据,并传递给item pipeline进行处理

4、在item pipeline中我们使用了三个核心方法和初始化函数,首先打来数据(这里采用__init__,当然你可以在open_spider()中执行,接着使用核心方法process——item进行数据处理,最后使用了close_spider()方法关闭了打开的数据)

5、在保存json数据的时候可以使用JsonItemExporter和JsonLinesItemExporter这两个类来进行

JsonItemExporter:每次将数据添加进内存最后写入磁盘,好处:一个满足json格式的数据。坏处:数据量较大时:内存占用较多(pipelines.py图片2)

JsonLinesItemExporter:每次调用export_item的时候将数据存储到内存,好处:每次直接将数据写入硬盘,节省内存,适用于数据量较大的情况。坏处:不是一个满足json格式的数据(pipelines.py图片3)

6、最后运行爬虫项目,得到目标结果