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爬虫框架相关推荐

  1. 爬虫---scrapy爬虫框架(详细+实战)

    ​ 活动地址:CSDN21天学习挑战赛 爬虫---scrapy爬虫框架 爬虫---scrapy爬虫框架 一.简介 1.基本功能 2.架构 3.scrapy项目的结构 二.scrapy环境搭建 三.如何 ...

  2. [Python爬虫] scrapy爬虫系列 一.安装及入门介绍

    前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...

  3. python 爬虫 scrapy 和 requsts 哪个快_Scrapy爬虫框架结构以及和Requests库的比较

    爬虫框架 *爬虫框架是实现爬虫功能的一个软件结构和功能组件集合 *爬虫框架是一个半成品,能够帮助用户实现专业网络爬虫 Scrapy爬虫框架结构 "5+2"结构 Spiders(用户 ...

  4. Python面试必备—分布式爬虫scrapy+redis解析

    传智播客博学谷 微信号:boxuegu- get最新最全的IT技能 免费领取各种视频资料 注意:文末送书 很多小伙伴留言,最近准备跳槽,但是面试的机会比较少,好不容易得到面试机会,由于技术点的匮乏,面 ...

  5. [Python Scrapy爬虫] 二.翻页爬取农产品信息并保存本地

    前面 "Python爬虫之Selenium+Phantomjs+CasperJS" 介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分 ...

  6. python 爬虫框架_Python网络爬虫-scrapy框架的使用

    1. Scrapy 1.1 Scrapy框架的安装 Scrapy是一个十分强大的爬虫框架,依赖的库比较多,至少需要依赖的库有Twisted .lxml和pyOpenSSL.在不同的平台环境下,它所依赖 ...

  7. Python 网络爬虫笔记9 -- Scrapy爬虫框架

    Python 网络爬虫笔记9 – Scrapy爬虫框架 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Py ...

  8. 用Scrapy爬虫框架爬取食品论坛数据并存入数据库

    这篇文章主要给大家介绍了食品网站的数据采集和存储过程,详解了如何分析网页结构.爬虫策略.网站类型.层级关系.爬虫方法和数据存储过程,最终实现将帖子的每条评论爬取到数据库中,并且做到可以更新数据,防止重 ...

  9. python爬虫scrapy框架爬取网页数据_Scrapy-Python

    scrapy Scrapy:Python的爬虫框架 实例Demo 抓取:汽车之家.瓜子.链家 等数据信息 版本+环境库 Python2.7 + Scrapy1.12 初窥Scrapy Scrapy是一 ...

  10. python scrapy框架爬虫_Scrapy爬虫框架教程(一)-- Scrapy入门

    前言 转行做python程序员已经有三个月了,这三个月用Scrapy爬虫框架写了将近两百个爬虫,不能说精通了Scrapy,但是已经对Scrapy有了一定的熟悉.准备写一个系列的Scrapy爬虫教程,一 ...

最新文章

  1. 【系统架构师修炼之道】(1):『序』
  2. 微软发布.NET 5.0 RC1,未来将只有一个.NET
  3. Nginx【学习笔记】
  4. 数据要素市场的组织形式和估值框架
  5. 一串字字符中多个逗号转换为一个,既标准分隔符(正则表达式)
  6. layui遇见的问题
  7. oracle 随机数重复吗,Oracle生成不重复随机数
  8. Java 对用户密码加密(Jeecg 登录密码加密方式)MD5andDES方式
  9. java anonymous class_java declare anonymous class using proxy api
  10. tensorflow 版本列表,如何找到我的系统中安装了哪个版本的TensorFlow?
  11. android捆绑demo_Android捆绑通知
  12. [基础]同步消息和异步消息传递的区别?
  13. chrome session丢失_为什么还是由这么多人搞不懂Cookie、Session、Token?
  14. 关于安装Spacy以及de和en模块遇到的坑---附最终解决方案
  15. 信息短信服务器发送失败怎么办,短信发送失败如何设置
  16. 七夕表白攻略:程序员的代码情书
  17. uniapp自定义搜索组件实现全部功能
  18. (更新中)论文中 如何插入 参考文件索引
  19. javascript 实现类似超市排队结账算法,求最少时间
  20. 苹果包重新签名及更换包名

热门文章

  1. Mac连接win10打印机
  2. C语言阿拉伯数字转大写汉字,将阿拉伯数字转大写汉字程序的类
  3. osg-04-基本几何图元-线宽
  4. pop3邮箱服务器地址,常用的邮箱服务器(SMTP、POP3)地址、端口
  5. Java零基础学习-API每日单词(日更)
  6. matlab四面体体积代码,求任意四面体体积公式
  7. 程序员需要知道的97件事情之 ------- 谋定而后动
  8. 南京大学计算机实验教程,南京大学 计算机系统基础 课程实验 2018(PA2)
  9. 国土档案管理信息系统【档案查借阅登记】
  10. 计算机自带游戏如何删除,win7怎么彻底删除自带游戏,win7自带游戏怎么删除隐藏...