搭建完整scrapy爬虫框架
一、scrapy简介
Scarpy框架中文官网:http://doc.scrapy.org/en/latest
Scrapy中文维护站点:http://scrapy-chs.readthedocs.il/zh_CN/latest/index.html
Scrapy Engine(引擎):中间通讯
Scheduler(调度器):接受引擎的Request请求,整理排列入队
Downloader(下载器):下载引擎的Request请求,获取Responses交还给引擎,由引擎交给spider处理
- Downloader Middlewares(下载中间件):自定义扩展下载功能的组件
Spider(爬虫):处理Responses,从中提取数据、获取Item字段需要的数据,将需要跟进的URL提交给引擎,再次进入调度器
- Spider Middlewares(Spider中间件):自定义扩展和操作引擎与spider通讯功能的组件
Item Pipeline(管道):处理spider中的Item,并后期处理(分析、过滤、存储等)
1.1 Scrapy运行过程
spider要处理的网站 -> 引擎
-> 调度器处理request -> 引擎
-> 下载器(按下载中间件的设置)下载request请求 -> 引擎
-> spider跟进的URL、item数据(若失败,调度器待会重新再下载)-> 引擎
-> 管道处理item;调度器处理跟进的URL(即处理request,进行循环)
当调度器不存在request,整个程序停止。
二、制作scrapy爬虫基本过程
- 新建项目(scrapy startproject xxx)
- 明确目标(编写items.py)
- 制作爬虫(spiders/xxspider.py)
- 存储内容(pipelines.py)
三、检验所需数据
3.1 查看网页代码、报头
chrome浏览器中查看代码、报头(制作爬虫文件需要使用)
查看代码:F12找或右键 -> 检查
查看报头:F12 -> network(F5刷新) -> 点击左边Name网页 -> 右边点击Header
3.2 scrapy工具(制作爬虫提取数据需要使用)
- shell工具:
scrapy shell http://www.baidu.com/ #检验返回的response
可以提取response内某标签的内容进行查看
- selectors选择器:
xpath():返回该表达式对应的所有节点的list列表
/html/head/title:选择html文档中的head标签内的title元素
/html/head/title/text():选择提到的title元素的文字
//td:选择td元素
//div[@class=”mine”]:选择具有class=”mine”属性的div元素
extract():序列化该节点为Unicode字符串,并返回list列表
css():返回该表达式对应的所有节点的list列表
re():正则表达式,返回Unicode字符串list列表
四、开始制作
本章在ubuntu系统下完成爬虫。
- 安装非python的依赖
$ Sudo apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
- 通过pip安装scrapy框架
$ Sudo pip install scrapy
4.1 新建项目
$ Scrapy startproject mySpider
4.2 明确目标
目标:抓取http://www.itcast.cn/channel/teacher.shtml里的讲师姓名等。
编写目标文件 items.py,定义结构化数据字段
4.3 制作爬虫
- 新建爬虫
../spiders$ scrapy genspider itcast http://www.itcast.cn
制作爬虫文件(itcast.py)
name = “” #爬虫识别名称,唯一
allow_domains = [] #搜索的域名范围
start_urls = () #爬虫从这里开始抓取数据
parse(self, response) #解析,每个url下载完后被调用,传回Response
-解析返回网页数据(response.body),提取结构化数据(生成item)
-生成需要“下一页”的url请求
- 制作管道文件(pipelines.py)
def process_item(self, item, spider)必须有 init,只执行一次,关闭时执行close_spider。 - 在配置文件中启用管道(settings.py)
数值越小,优先级越高。 - 新建数据存储目录data,在该目录下开启爬虫。
../ITcast$ mkdir data
../ITcast$ cd data/
../data$ scrapy crawl itcast
五、附案例,实现不同功能
5.1 腾讯招聘网自动翻页采集
主要处理不同情况:爬虫数据空值处理、翻页操作;配置文件报头USER_AGENT,header处理
- 新建项目
$ scrapy startproject Tencent
- 明确目标
目标:爬取https://hr.tencent.com/position.php?&start=0招聘网职位等 - 数据处理
编写目标文件(items.py)
- 新建爬虫
../Tencent$ scrapy genspider tencent “tencent.com”
编写爬虫文件(tencent.py)
一页的数据:
翻页处理
下一页(写死总页数):
下一页(灵活):
编写管道文件(pipelines.py)
在配置文件中启用管道(settings.py)
报头处理
header处理
在存储数据目录下开启爬虫:
Tencent$ mkdir data
Tencent $ cd data/
data$ scrapy crawl itcast
5.2 爬取斗鱼主播图片(简略,爬取图片类)
items.py
douyu.py
Pipelines.py(ImagesPipeline类)
settings.py