本节示例以爬取西刺免费代理网站为例( http://www.xicidaili.com ),说明用scrapy框架写一个爬虫的基本流程。其中已实现mysql存储。
简易爬虫编写
1. 新建一个工程
scrapy startproject xici
生成如下目录:
1 |
|
2. 生成一个spider
进入xici
项目目录,使用命令生成一个spider
`scrapy genspider xiciSpider xicidaili.com` //生成一个爬取域名xicidaili.com,名字为xiciSpider的spider
目录结构如下:
1 |
|
3. 编写item
在items.py中XiciItem类中加入以下信息
1 |
|
4. 编写spider
在xiciSpider.py中新增以下内容
1 |
|
- `name`: Spider的标识。它必须是唯一的, 那就是说,你不能在不同的Spiders中设置相同的名字。
- `start_urls`:Spider将会去爬这些URLs的列表。所以刚开始的下载页面将要包含在这些列表中。其他子URL将会从这些起始URL中继承性生成。
- `parse()`:每一个URL爬取完成默认调用的处理函数, 这个方法负责解析response数据和提出抓取的数据(作为抓取的items)。
5. 运行爬虫
输入以下命令进行文件爬取
`scrapy crawl xiciSpider //运行爬虫`
`scrapy crawl xiciSpider -o ips.json //将提取的结果以json格式(自动转换)存储到ips.json文件中`
> scrapy 内置支持如下格式: 'xml', 'jl', 'json', 'jsonlines', 'csv', 'pickle', 'marshal'
将爬取的内容存储到数据库
本示例以mysql为例
1. pipeline编写
在pipeline.py中加入数据库存储的相关代码
1 |
|
> 以上代码中定义了类MySQLStoreIPPipeline,调用该pipeline时会自动调用其`process_item`方法
> 每个item pipeline组件都需要调用`process_item`方法,这个方法必须返回一个 Item (或任何继承类)对象, 或是抛出 DropItem 异常,被丢弃的item将不会被之后的pipeline组件所处理。
2. 配置settings.py文件
在settings.py中加入如下配置
1 | ITEM_PIPELINES = { |
> 以上配置是显示声明调用MySQLStoreIPPipeline,如果不加入该项配置,即使在pipeline.py中定义了该类,spider也不会调用
>
> 类后面的整型值,确定了其运行的顺序,item按数字从低到高的顺序,通过pipeline,通常将这些数字定义在0-1000范围内