搭建完整scrapy爬虫框架

  • 一、scrapy简介
  • 1.1 Scrapy运行过程
  • 二、制作scrapy爬虫基本过程
  • 三、检验所需数据
  • 3.1 查看网页代码、报头
  • 3.2 scrapy工具(制作爬虫提取数据需要使用)
  • 四、开始制作
  • 4.1 新建项目
  • 4.2 明确目标
  • 4.3 制作爬虫
  • 五、附案例,实现不同功能
  • 5.1 腾讯招聘网自动翻页采集
  • 5.2 爬取斗鱼主播图片(简略,爬取图片类)


一、scrapy简介

Scarpy框架中文官网:http://doc.scrapy.org/en/latest

Scrapy中文维护站点:http://scrapy-chs.readthedocs.il/zh_CN/latest/index.html

python 爬虫开源框架 python爬虫框架官网_python


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爬虫基本过程

  1. 新建项目(scrapy startproject xxx)
  2. 明确目标(编写items.py)
  3. 制作爬虫(spiders/xxspider.py)
  4. 存储内容(pipelines.py)

三、检验所需数据

3.1 查看网页代码、报头

chrome浏览器中查看代码、报头(制作爬虫文件需要使用)

查看代码:F12找或右键 -> 检查

查看报头:F12 -> network(F5刷新) -> 点击左边Name网页 -> 右边点击Header

python 爬虫开源框架 python爬虫框架官网_python 爬虫开源框架_02

3.2 scrapy工具(制作爬虫提取数据需要使用)

  • shell工具:
scrapy shell http://www.baidu.com/ #检验返回的response

可以提取response内某标签的内容进行查看

python 爬虫开源框架 python爬虫框架官网_python 爬虫开源框架_03

  • 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系统下完成爬虫。

  1. 安装非python的依赖
$ Sudo apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
  1. 通过pip安装scrapy框架
$ Sudo pip install scrapy

4.1 新建项目

$ Scrapy startproject mySpider

python 爬虫开源框架 python爬虫框架官网_ide_04

4.2 明确目标

目标:抓取http://www.itcast.cn/channel/teacher.shtml里的讲师姓名等。

编写目标文件 items.py,定义结构化数据字段

python 爬虫开源框架 python爬虫框架官网_ide_05

4.3 制作爬虫

  1. 新建爬虫
../spiders$ scrapy genspider itcast http://www.itcast.cn

python 爬虫开源框架 python爬虫框架官网_爬虫_06


 制作爬虫文件(itcast.py)

python 爬虫开源框架 python爬虫框架官网_python 爬虫开源框架_07


 name = “” #爬虫识别名称,唯一

 allow_domains = [] #搜索的域名范围

 start_urls = () #爬虫从这里开始抓取数据

 parse(self, response) #解析,每个url下载完后被调用,传回Response

  -解析返回网页数据(response.body),提取结构化数据(生成item)

  -生成需要“下一页”的url请求

  1. 制作管道文件(pipelines.py)

    def process_item(self, item, spider)必须有 init,只执行一次,关闭时执行close_spider。
  2. 在配置文件中启用管道(settings.py)

    数值越小,优先级越高。
  3. 新建数据存储目录data,在该目录下开启爬虫。
../ITcast$ mkdir data
../ITcast$ cd data/
../data$ scrapy crawl itcast

python 爬虫开源框架 python爬虫框架官网_scrapy_08

五、附案例,实现不同功能

5.1 腾讯招聘网自动翻页采集

主要处理不同情况:爬虫数据空值处理、翻页操作;配置文件报头USER_AGENT,header处理

  1. 新建项目
$ scrapy startproject Tencent
  1. 明确目标
    目标:爬取https://hr.tencent.com/position.php?&start=0招聘网职位等
  2. 数据处理
    编写目标文件(items.py)
  3. 新建爬虫
../Tencent$ scrapy genspider tencent “tencent.com”

编写爬虫文件(tencent.py)

一页的数据:

python 爬虫开源框架 python爬虫框架官网_ide_09


翻页处理

下一页(写死总页数):

python 爬虫开源框架 python爬虫框架官网_python_10


下一页(灵活):

python 爬虫开源框架 python爬虫框架官网_ide_11


编写管道文件(pipelines.py)

python 爬虫开源框架 python爬虫框架官网_python 爬虫开源框架_12


在配置文件中启用管道(settings.py)

python 爬虫开源框架 python爬虫框架官网_ide_13


报头处理

python 爬虫开源框架 python爬虫框架官网_python 爬虫开源框架_14


header处理

python 爬虫开源框架 python爬虫框架官网_爬虫_15


在存储数据目录下开启爬虫:

Tencent$ mkdir data
Tencent $ cd data/
data$ scrapy crawl itcast

5.2 爬取斗鱼主播图片(简略,爬取图片类)

items.py

python 爬虫开源框架 python爬虫框架官网_ide_16


douyu.py

python 爬虫开源框架 python爬虫框架官网_python_17


Pipelines.py(ImagesPipeline类)

python 爬虫开源框架 python爬虫框架官网_ide_18


settings.py

python 爬虫开源框架 python爬虫框架官网_ide_19