网络爬虫:Scrapy爬虫框架
Scrapy爬虫框架
Copyright: Jingmin Wei, Pattern Recognition and Intelligent System, School of Artificial and Intelligence, Huazhong University of Science and Technology
网络爬虫专栏链接
文章目录
- Scrapy爬虫框架
- Reference
- Scrapy爬虫框架介绍
- Scrapy爬虫框架流程
- Requests库和Scrapy爬虫框架对比
- Scrapy爬虫的常用命令
- Scrapy爬虫实例
- 步骤1:建立一个Scrapy爬虫工程
- 步骤2:在工程中产生一个 Scrapy 爬虫
- 步骤3:配置产生的spider爬虫
- 步骤4:运行爬虫,获取网页
- yield 关键字
- Scrapy爬虫的基本使用
本教程主要参考中国大学慕课的 Python 网络爬虫与信息提取,为个人学习笔记。
在学习过程中遇到了一些问题,都手动记录并且修改更正,保证所有的代码为有效。且结合其他的博客总结了一些常见问题的解决方式。
本教程不商用,仅为学习参考使用。如需转载,请联系本人。
Reference
爬虫 MOOC
数据分析 MOOC
廖雪峰老师的 Python 教程
Scrapy爬虫框架介绍
Scrapy 是一个快速功能强大的网络爬虫框架
Win 平台: “以管理员身份运行” cmd ,执行
pip3 install scrapy
pip3 --time-out=2000 install scrapy
安装后小测:执行 scrapy ‐h
Scrapy 不是一个函数功能库,而是一个爬虫框架。
爬虫框架是实现爬虫功能的一个软件结构和功能组件集合,它是一个半成品,能够帮助用户实现专业网络爬虫。
Scrapy爬虫框架流程
结构,分布式,“5+2”结构
数据流的三个路径:
1 Engine 从 Spider 处获得爬取请求(Request)
2 Engine 将爬取请求转发给 Scheduler,用于调度
3 Engine 从 Scheduler 处获得下一个要爬取的请求
4 Engine 将爬取请求通过中间件发送给 Downloader
5 爬取网页后,Downloader 形成响应(Response)通过中间件发给 Engine
6 Engine 将收到的响应通过中间件发送给 Spider 处理
7 Spider 处理响应后产生爬取项(scraped Item)和新的爬取请求(Requests)给 Engine
8 Engine 将爬取项发送给 Item Pipeline(框架出口)
9 Engine 将爬取请求发送给 Scheduler
数据流的出入口:
Engine 控制各模块数据流,不间断从 Scheduler 处获得爬取请求,直至请求为空
框架入口:Spider 的初始爬取请求
框架出口:Item Pipeline
Engine
(1) 控制所有模块之间的数据流
(2) 根据条件触发事件
不需要用户修改
Downloader
根据请求下载网页,不需要用户修改
Scheduler
对所有爬取请求进行调度管理,不需要用户修改
Downloader Middleware
目的:实施 Engine、Scheduler 和 Downloader 之间进行用户可配置的控制
功能:修改、丢弃、新增请求或响应
用户可以编写配置代码
Spider
(1) 解析 Downloader 返回的响应(Response)
(2) 产生爬取项(scraped item)
(3) 产生额外的爬取请求(Request)
需要用户编写配置代码
Item Pipelines
(1) 以流水线方式处理 Spider 产生的爬取项
(2) 由一组操作顺序组成,类似流水线,每个操作是一个 Item Pipeline 类型
(3) 可能操作包括:清理、检验和查重爬取项中的 HTML 数据、将数据存储到数据库
需要用户编写配置代码
Spider Middleware
目的:对请求和爬取项的再处理
功能:修改、丢弃、新增请求或爬取项
用户可以编写配置代码
“5+2” 结构
Requests库和Scrapy爬虫框架对比
相同点:
两者都可以进行页面请求和爬取,Python 爬虫的两个重要技术路线
两者可用性都好,文档丰富,入门简单
两者都没有处理 js、提交表单、应对验证码等功能(可扩展)
不同点:
页面级爬虫 | 网站级爬虫 |
---|---|
功能库 | 框架 |
并发性考虑不足,性能较差 | 并发性好,性能较高 |
重点在于页面下载 | 重点在于爬虫结构 |
定制灵活 | 一般定制灵活,深度定制困难 |
上手十分简单 | 入门稍难 |
选用哪个技术路线开发爬虫呢?
非常小的需求,requests 库
不太小的需求,Scrapy 框架
定制程度很高的需求(不考虑规模),自搭框架,requests > Scrapy
Scrapy爬虫的常用命令
Scrapy 是为持续运行设计的专业爬虫框架,提供操作的 Scrapy 命令行
Win 下,启动 cmd 控制台
scrapy -h
命令行格式:
scrapy <command> [options] [args]
主要命令在 command 部分编写
命令 | 说明 | 格式 |
---|---|---|
startproject | 创建一个新工程 | scrapy startproject <name> [dir] |
genspider | 创建一个爬虫 | scrapy genspider [options] <name> <domain> |
settings | 获得爬虫配置信息 | scrapy settings [options] |
crawl | 运行一个爬虫 | scrapy crawl <spider> |
list | 列出工程中所有爬虫 | scrapy list |
shell | 启动URL调试命令行 | scrapy shell [url] |
为什么Scrapy采用命令行创建和运行爬虫?
命令行(不是图形界面)更容易自动化,适合脚本控制。本质上,Scrapy是给程序员用的,功能(而不是界面)更重要。
Scrapy爬虫实例
演示HTML页面地址:http://python123.io/ws/demo.html
文件名称:demo.html
应用Scrapy爬虫框架主要是编写配置型代码
步骤1:建立一个Scrapy爬虫工程
选取一个目录(E:\新桌面\python\练习代码\scrapy爬虫框架),然后执行如下命令:
scrapy startproject python123demo
生成工程目录如下:
步骤2:在工程中产生一个 Scrapy 爬虫
进入工程目录(E:\新桌面\python\练习代码\scrapy爬虫框架\python123demo),然后执行如下命令:
scrapy genspider demo python123.io
该命令作用:
(1) 生成一个名称为 demo 的 spider
(2) 在 spiders 目录下增加代码文件 demo.py
该命令仅用于生成demo.py,该文件也可以手工生成
步骤3:配置产生的spider爬虫
配置:(1)初始 URL 地址 (2)获取页面后的解析方式
打开 demo.py
# -*- coding: utf-8 -*-
import scrapyclass DemoSpider(scrapy.Spider): #继承于scrapy.Spidername = 'demo' #爬虫名字#allowed_domains = ['python123.io'] #只能爬取该域名以下的链接#start_urls = ['http://python123.io/'] #要爬取页面的初始页面start_urls = ['http://python123.io/ws/demo.html'] #上面两行对于这个程序没必要使用def parse(self, response):fname = response.url.split('/')[-1] #将response返回的对象存储在文件中with open(fname, 'wb') as f:f.write(response.body)self.log('Save file %s' %fname)
步骤4:运行爬虫,获取网页
在命令行下(E:\新桌面\python\练习代码\scrapy爬虫框架\python123demo),执行如下命令:
scrapy crawl demo
执行完成后,在工程目录下,生成了demo.html文件
demo.py代码的完整版本:
# -*- coding: utf-8 -*-
import scrapyclass DemoSpider(scrapy.Spider): #继承于scrapy.Spidername = 'demo' #爬虫名字def start_requests(self):urls = ['http://python123.io/ws/demo.html']for url in urls:yield scrapy.Request(url = url, callback = self.parse) #生成器写法,每次调用时才返回一个url链接def parse(self, response):fname = response.url.split('/')[-1] #将response返回的对象存储在文件中with open(fname, 'wb') as f:f.write(response.body)self.log('Save file %s' %fname)
由此引入下一节,yield 关键字。
yield 关键字
yield 生成器:生成器每次产生一个值(yield 语句),函数被冻结,被唤醒后再产生一个值。
生成器是一个不断产生值的函数。
>>> def gen(n):for i in range(n):yield i**2>>> for i in gen(5):print(i,"",end="")0 1 4 9 16
生成器相比一次列出所有内容的优势:
更节省存储空间,响应更迅速,使用更灵活。
Scrapy爬虫的基本使用
步骤1:创建一个工程和 Spider 模板
步骤2:编写 Spider
步骤3:编写 Item Pipeline
步骤4:优化配置策略
Request类
class scrapy.http.Request()
Request 对象表示一个 HTTP 请求。由 Spider 生成,由 Downloader 执行。
属性或方法 | 说明 |
---|---|
.url | Request 对应的请求 URL 地址 |
.method | 对应的请求方法,‘GET’ ‘POST’ 等 |
.headers | 字典类型风格的请求头 |
.body | 请求内容主体,字符串类型 |
.meta | 用户添加的扩展信息,在 Scrapy 内部模块间传递信息使用 |
.copy() | 复制该请求 |
Response类
class scrapy.http.Response()
Response 对象表示一个 HTTP 响应。由 Downloader 生成,由 Spider 处理。
属性或方法 | 说明 |
---|---|
.url | Response 对应的 URL 地址 |
.status | HTTP 状态码,默认是 200 |
.headers | Response 对应的头部信息 |
.body | Response 对应的内容信息,字符串类型 |
.flags | 一组标记 |
.request | 产生 Response 类型对应的 Request 对象 |
.copy() | 复制该响应 |
Item类
class scrapy.item.Item()
Item 对象表示一个从 HTML 页面中提取的信息内容。由 Spider 生成,由 Item Pipeline 处理。
Item 类似字典类型,可以按照字典类型操作。
Scrapy爬虫支持多种HTML信息提取方法:
- Beautiful Soup,lxml,re,XPath Selector,CSS Selector
CSS Selector的基本使用
<HTML>.css('a::attr(href)').extract()
网络爬虫:Scrapy爬虫框架相关推荐
- 爬虫---scrapy爬虫框架(详细+实战)
活动地址:CSDN21天学习挑战赛 爬虫---scrapy爬虫框架 爬虫---scrapy爬虫框架 一.简介 1.基本功能 2.架构 3.scrapy项目的结构 二.scrapy环境搭建 三.如何 ...
- [Python爬虫] scrapy爬虫系列 一.安装及入门介绍
前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...
- python 爬虫 scrapy 和 requsts 哪个快_Scrapy爬虫框架结构以及和Requests库的比较
爬虫框架 *爬虫框架是实现爬虫功能的一个软件结构和功能组件集合 *爬虫框架是一个半成品,能够帮助用户实现专业网络爬虫 Scrapy爬虫框架结构 "5+2"结构 Spiders(用户 ...
- Python面试必备—分布式爬虫scrapy+redis解析
传智播客博学谷 微信号:boxuegu- get最新最全的IT技能 免费领取各种视频资料 注意:文末送书 很多小伙伴留言,最近准备跳槽,但是面试的机会比较少,好不容易得到面试机会,由于技术点的匮乏,面 ...
- [Python Scrapy爬虫] 二.翻页爬取农产品信息并保存本地
前面 "Python爬虫之Selenium+Phantomjs+CasperJS" 介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分 ...
- python 爬虫框架_Python网络爬虫-scrapy框架的使用
1. Scrapy 1.1 Scrapy框架的安装 Scrapy是一个十分强大的爬虫框架,依赖的库比较多,至少需要依赖的库有Twisted .lxml和pyOpenSSL.在不同的平台环境下,它所依赖 ...
- Python 网络爬虫笔记9 -- Scrapy爬虫框架
Python 网络爬虫笔记9 – Scrapy爬虫框架 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Py ...
- 用Scrapy爬虫框架爬取食品论坛数据并存入数据库
这篇文章主要给大家介绍了食品网站的数据采集和存储过程,详解了如何分析网页结构.爬虫策略.网站类型.层级关系.爬虫方法和数据存储过程,最终实现将帖子的每条评论爬取到数据库中,并且做到可以更新数据,防止重 ...
- python爬虫scrapy框架爬取网页数据_Scrapy-Python
scrapy Scrapy:Python的爬虫框架 实例Demo 抓取:汽车之家.瓜子.链家 等数据信息 版本+环境库 Python2.7 + Scrapy1.12 初窥Scrapy Scrapy是一 ...
- python scrapy框架爬虫_Scrapy爬虫框架教程(一)-- Scrapy入门
前言 转行做python程序员已经有三个月了,这三个月用Scrapy爬虫框架写了将近两百个爬虫,不能说精通了Scrapy,但是已经对Scrapy有了一定的熟悉.准备写一个系列的Scrapy爬虫教程,一 ...
最新文章
- 【系统架构师修炼之道】(1):『序』
- 微软发布.NET 5.0 RC1,未来将只有一个.NET
- Nginx【学习笔记】
- 数据要素市场的组织形式和估值框架
- 一串字字符中多个逗号转换为一个,既标准分隔符(正则表达式)
- layui遇见的问题
- oracle 随机数重复吗,Oracle生成不重复随机数
- Java 对用户密码加密(Jeecg 登录密码加密方式)MD5andDES方式
- java anonymous class_java declare anonymous class using proxy api
- tensorflow 版本列表,如何找到我的系统中安装了哪个版本的TensorFlow?
- android捆绑demo_Android捆绑通知
- [基础]同步消息和异步消息传递的区别?
- chrome session丢失_为什么还是由这么多人搞不懂Cookie、Session、Token?
- 关于安装Spacy以及de和en模块遇到的坑---附最终解决方案
- 信息短信服务器发送失败怎么办,短信发送失败如何设置
- 七夕表白攻略:程序员的代码情书
- uniapp自定义搜索组件实现全部功能
- (更新中)论文中 如何插入 参考文件索引
- javascript 实现类似超市排队结账算法,求最少时间
- 苹果包重新签名及更换包名
热门文章
- Mac连接win10打印机
- C语言阿拉伯数字转大写汉字,将阿拉伯数字转大写汉字程序的类
- osg-04-基本几何图元-线宽
- pop3邮箱服务器地址,常用的邮箱服务器(SMTP、POP3)地址、端口
- Java零基础学习-API每日单词(日更)
- matlab四面体体积代码,求任意四面体体积公式
- 程序员需要知道的97件事情之 ------- 谋定而后动
- 南京大学计算机实验教程,南京大学 计算机系统基础 课程实验 2018(PA2)
- 国土档案管理信息系统【档案查借阅登记】
- 计算机自带游戏如何删除,win7怎么彻底删除自带游戏,win7自带游戏怎么删除隐藏...