【Python爬虫】搭建完整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爬虫基本过程

  1. 新建项目(scrapy startproject xxx)
  2. 明确目标(编写items.py)
  3. 制作爬虫(spiders/xxspider.py)
  4. 存储内容(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系统下完成爬虫。

  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

在这里插入图片描述

4.2 明确目标

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

编写目标文件 items.py,定义结构化数据字段
在这里插入图片描述

4.3 制作爬虫

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

在这里插入图片描述
 制作爬虫文件(itcast.py)

在这里插入图片描述
 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

在这里插入图片描述

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

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)
一页的数据:
在这里插入图片描述
翻页处理
下一页(写死总页数):
在这里插入图片描述
下一页(灵活):
在这里插入图片描述
编写管道文件(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
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值