python全栈之路系列之scrapy爬虫
An open source and collaborative framework for extracting the data you need from websites.
Scrapy运行流程大概如下:
引擎从调度器中取出一个链接(URL)用于接下来的抓取
引擎把URL封装成一个请求(Request)传给下载器
下载器把资源下载下来,并封装成应答包(Response)
爬虫解析Response
解析出实体(Item),则交给实体管道进行进一步的处理
解析出的是链接(URL),则把URL交给调度器等待抓取
安装
因为我是Ubuntu系统,所以可以直接通过pip安装scrapy
pip install scrapy
yum install gcc gcc-c++ python-devel mysql-devel zlib-devel openssl-devel -y
pip install twisted==13.1.0()
安装时候报错,需要安装着两项低版本的twisted
使用
创建项目
scrapy startproject xiaohuar
目录结构
编写爬虫
创建文件:”xiaohuar/xiaohuar/spiders/myspider.py”
运行
进入xiaohuar目录,运行命令
一个抓取图片的小实例
选择器
基本的选择器
选择器
描述
//
子子孙孙
/
孩子
//div[@class="c1"][@id='i1']
属性选择器
//div//img/@src
div下所有的img属性src
//div//a[1]
索引取值
//div//a[1]//text()
索引取值的内容
通过extract获取真实的数据:
支持正则
选择器
描述
//.select("div//a[1]").re("昵称:(\w+)")
正则
两种查找方式
正则表达式实例
扩展
重复的URL不访问
先把长的URL进行MD5加密,加密成32或者64位,可以保存在一个集合或者缓存、数据库中,每次抓取之前都先判断有没有这个URL。
递归查找
设置查找深度:修改settings.py配置文件,加入以下参数指定深度DEPTH_LIMIT = 1
内容格式化
就是相当于分类,比如说下面的文件:
文件
功能
myspider.py
查找URL的规则
items.py
数据
pipelines.py
数据持久化
如图所示: