Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >手把手带你入门Python爬虫Scrapy

手把手带你入门Python爬虫Scrapy

作者头像
IT阅读排行榜
发布于 2020-09-11 09:14:46
发布于 2020-09-11 09:14:46
1.3K00
代码可运行
举报
文章被收录于专栏:华章科技华章科技
运行总次数:0
代码可运行

导读:Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

作者 / 来源:无量测试之道

01 Scrapy工作流程是怎么样的

下图是从网络上找的一张Scrapy的工作流程图,并且标注了相应的中文说明信息:

02 Scrapy框架的六大组件

它们分别是:

  • 调度器(Scheduler)
  • 下载器(Downloader)
  • 爬虫(Spider)
  • 中间件(Middleware)
  • 实体管道(Item Pipeline)
  • Scrapy引擎(Scrapy Engine)

03 工作流程如下

Step1. 当爬虫(Spider)要爬取某URL地址的页面时,使用该URL初始化Request对象提交给引擎(Scrapy Engine),并设置回调函数,Spider中初始的Request是通过调用start_requests() 来获取的。start_requests() 读取start_urls 中的URL,并以parse为回调函数生成Request 。

备注:你所创建的项目名.py 文件里面有一个列表:start_urls=[‘http://lab.scrapyd.cn/page/1/‘] (这是我的示例),这里的start_requests() 读取的start_urls 就是来自于这里,这个文件在大家创建爬虫项目时会自动新建。parse()这个回调函数也是自动创建的。只是简单的定义了一下,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def parse(self, response):
    pass

Step2. Request对象进入调度器(Scheduler) 按某种算法进行排队,之后的每个时刻调度器将其出列,送往下载器。

备注:Scheduler的作用就是对请求的调度,包括过滤,请求的入队和出队操作。

Step3. 下载器(Downloader)根据Request对象中的URL地址发送一次HTTP请求到网络服务器把资源下载下来,并封装成应答包(Response)。

备注:相当于就是将获取的页面资源数据信息转化为Response实例,以便传递给Spider 的Parse() 函数继续处理。

Step4. 应答包Response对象最终会被递送给爬虫(Spider)的页面解析函数进行处理。

备注:这个页面解析函数就是步骤一里面提到的parse() 函数,它是创建项目时自动生成的。

Step5. 若是解析出实体(Item),则交给实体管道(Item Pipeline)进行进一步的处理。

由Spider返回的Item将被存到数据库(由某些Item Pipeline处理)或使用Feed exports存入到文件中。

备注:实体(Item) 实际上就是指我们要获取的数据

Step6. 若是解析出的是链接(URL),则把URL交给调度器(Scheduler)等待抓取。

备注:这里有一种循环调用的感觉,解析的item如果是url就重复整个工作流程。

04 如何安装与简单使用

1. 安装就很简单了,一条命令搞定

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python3 -m pip install scrapy #这个可能需要花掉一段时间,如果你的网络快可能就比较快,如果你出现超时导致没有安装成功可以继续执行这个命令

检验是否安装成功:进入python3 的命令行,输入import scrapy 如果没有报错就表示安装成功了。

2. 简单使用说明

Step1. 开始创建一个Scrapy 项目,我这里以爬取lab为示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scrapy startproject lab #创建新的Scrapy项目,注意一下,如果此命令没有你就需要配置一下Scrapy 的环境变量

cd lab #进入创建的项目目录

scrapy genspider labs http://lab.scrapyd.cn/page/1/ # 生成spider 代码

Step2. 定义提取的Item

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class LabItem(scrapy.Item): 
    title = scrapy.Field()
    author = scrapy.Field()

Step3. 编写解析Parse函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def parse(self, response):
    items=LabItem() #实例化一个数据对象,用于返回
    for sel in response.xpath('//div[@class="col-mb-12 col-8"]'):
        print(sel)
        for i in range(len(sel.xpath('//div[@class="quote post"]//span[@class="text"]/text()'))):
            title = sel.xpath('//div[@class="quote post"]//span[@class="text"]/text()')[i].get()
            author = sel.xpath('//div[@class="quote post"]//small[@class="author"]/text()')[i].get()
            items["title"]=title
            items["author"] = author
            yield items #返回提出来的每一个数据对象

Step4. 编写Pipeline 来提取Item数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from itemadapter import ItemAdapter
import json

class FilePipeline(object):

    def open_spider(self, spider):
        print("当爬虫执行开始的时候回调:open_spider")

    def __init__(self):
        print("创建爬虫数据存储文件")
        self.file = open('test.json',"w", encoding="utf-8")

    def process_item(self, item, spider):
        print("开始处理每一条提取出来的数据")
        content = json.dumps(dict(item),ensure_ascii=False)+"\n"
        self.file.write(content)
        return item

    def close_spider(self, spider):
        print("当爬虫执行结束的时候回调:close_spider")
        self.file.close()

这里是自定义的一个pipeline,所以还需要在setting.py 文件里面把它配置上,如下:
ITEM_PIPELINES = {
   'lab.pipelines.FilePipeline': 300,
}

最终提取到文件的结果如下图所示:

总结

今天的分享主要是从整体上讲了一下Scrapy 的工作流程,算是一个入门的学习,如果把这个流程中的一些概念性的内容能够掌握好理解到位,那么接下来的学习会更容易一些,同时基于理解的学习会更深刻。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据DT 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python 爬虫之Scrapy《下》
今天这篇文章主要是分享两个技术点。 第一:翻页数据如何处理; 第二:构建一个db pipeline来获取数据并入库。
Wu_Candy
2022/07/04
3060
Python 爬虫之Scrapy《下》
Python自动化开发学习-Scrapy
讲师博客:https://www.cnblogs.com/wupeiqi/p/6229292.html 中文资料(有示例参考):http://www.scrapyd.cn/doc/
py3study
2020/01/08
1.6K0
【0基础学爬虫】爬虫基础之scrapy的使用
大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学爬虫】专栏,帮助小白快速入门爬虫,本期为自动化工具 Selenium 的使用。
K哥爬虫
2024/07/01
1830
【0基础学爬虫】爬虫基础之scrapy的使用
python爬虫 scrapy爬虫框架的基本使用
在编写爬虫的时候,如果我们使用 requests、aiohttp 等库,需要从头至尾把爬虫完整地实现一遍,比如说异常处理、爬取调度等,如果写的多了,的确会比较麻烦。利用现有的爬虫框架,可以提高编写爬虫的效率,而说到 Python 的爬虫框架,Scrapy 当之无愧是最流行最强大的爬虫框架了。
叶庭云
2020/09/17
1.6K0
Scrapy框架
简单网页的爬取可以利用re模块,复杂网页的爬取对于内容的提取则会显得十分麻烦。Scrapy框架是python下的一个爬虫框架,因为它足够简单方便受到人们的青睐。
爱编程的小明
2022/09/05
5180
Scrapy框架
创建scrapy项目_项目构建是什么意思
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/03
2880
创建scrapy项目_项目构建是什么意思
007:Scrapy核心架构和高级运用
Scrapy核心架构和其组件的功能 Scrapy的工作流 Scrapy的中文输出储存 介绍CrawSpider 编写了一个爬虫实战来进行我们的mysql数据库操作
李玺
2021/11/22
1.2K0
007:Scrapy核心架构和高级运用
scrapy笔记六 scrapy运行架构的实例配合解析
在之前的项目中已经可以正常运行出scrapy框架下的爬虫程序,但是如果换一个项目换一个爬取任务,要活学活用还需要进行针对scrapy是如何运行的进行深入的学习.
十四君
2019/11/27
8660
scrapy笔记六 scrapy运行架构的实例配合解析
[爬虫]scrapy框架
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
周小董
2019/03/25
1.3K0
[爬虫]scrapy框架
python爬虫–scrapy(再探)
— 图片:xpath解析出图片src的属性值。单独的对图片地址发起请求获取图片二进制类型的数据。
全栈程序员站长
2021/04/21
6620
python爬虫–scrapy(再探)
「Python爬虫系列讲解」十三、用 Scrapy 技术爬取网络数据
前文回顾: 「Python爬虫系列讲解」一、网络数据爬取概述 「Python爬虫系列讲解」二、Python知识初学 「Python爬虫系列讲解」三、正则表达式爬虫之牛刀小试 「Python爬虫系列讲解」四、BeautifulSoup 技术 「Python爬虫系列讲解」五、用 BeautifulSoup 爬取电影信息 「Python爬虫系列讲解」六、Python 数据库知识 「Python爬虫系列讲解」七、基于数据库存储的 BeautifulSoup 招聘爬取 「Python爬虫系列讲解」八、Selenium 技术 「Python爬虫系列讲解」九、用 Selenium 爬取在线百科知识 「Python爬虫系列讲解」十、基于数据库存储的 Selenium 博客爬虫 「Python爬虫系列讲解」十一、基于登录分析的 Selenium 微博爬虫 「Python爬虫系列讲解」十二、基于图片爬取的 Selenium 爬虫
荣仔_最靓的仔
2021/02/02
3.3K0
「Python爬虫系列讲解」十三、用 Scrapy 技术爬取网络数据
Python - 手把手教你用Scrapy编写一个爬虫
在群里和群友们聊天,就聊到了用爬虫去爬小说方法,毫无疑问肯定首选Python啊,依稀记得之前大数据比赛时候联系的数据可视化使用Scrapy和Flask,那就用Scrapy写一个小爬虫吧,说干就干
用砖头敲代码
2022/08/30
4890
独家 | 手把手教你用scrapy制作一个小程序 !(附代码)
本文提供了scrapy和pycharm安装和配置时容易出现错误和解决办法,同时演绎了网络教程经典的“爬取豆瓣9分书单”的例子,每一步代码都给出了编者的理解,并对可能出现的错误给出了解决方案,操作性强。 一. 前言 Scrapy是用于Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。 有爬虫爱好者认为scrapy的优点是自定义程度高,适合学习研究爬虫技术,要学习的相关知识也较多,故而完成一个
数据派THU
2018/01/30
2.1K0
独家 | 手把手教你用scrapy制作一个小程序 !(附代码)
爬虫——scrapy入门
scrapy 安装scrapy pip install scrapy windows可能安装失败,需要先安装c++库或twisted,pip install twisted 创建项目 scrapy startproject tutorial 该命令将会创建包含下列内容的 tutorial 目录: tutorial/ scrapy.cfg tutorial/ __init__.py items.py pipelines.py
py3study
2020/01/19
5800
Scrapy框架新手入门教程
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
小锋学长生活大爆炸
2020/08/13
7140
Scrapy框架新手入门教程
《手把手带你学爬虫──初级篇》第6课 强大的爬虫框架Scrapy
Scrapy是一个Python爬虫应用框架,爬取和处理结构性数据非常方便。使用它,只需要定制开发几个模块,就可以轻松实现一个爬虫,让爬取数据信息的工作更加简单高效。
GitOPEN
2019/01/29
1.2K0
《手把手带你学爬虫──初级篇》第6课  强大的爬虫框架Scrapy
(原创)七夜在线音乐台开发 第三弹 爬虫篇
上一篇咱们讲到了七夜音乐台的需求和所需要的技术。咱们今天就讲一下爬虫,为什么要讲爬虫,因为音乐台的数据源需要通过爬虫来获取,不可能手动来下载。下图是一个网络爬虫的基本框架: 网络爬虫的基本工作流程如下
七夜安全博客
2018/06/26
1.1K0
从原理到实战,一份详实的 Scrapy 爬虫教程
本文将从原理到实战带领大家入门另一个强大的框架 Scrapy。如果对Scrapy感兴趣的话,不妨跟随本文动手做一遍!
CDA数据分析师
2021/08/05
11.2K0
从原理到实战,一份详实的 Scrapy 爬虫教程
爬虫框架scrapy
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中。 其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
菲宇
2019/06/12
1.8K0
爬虫框架scrapy
python爬虫–scrapy(初识)
因为我是同时安装anaconda和python3.7,所以在使用pip的时候总是会显示anaconda中已经安装(众所周知),就很烦 。一气之下,挂着VPN并且在CMD中使用conda install scrapy,然后安装好。 PS:也有可能直接使用conda install scrapy就可以了(我没试)
全栈程序员站长
2021/04/19
4250
python爬虫–scrapy(初识)
相关推荐
Python 爬虫之Scrapy《下》
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档