(爬虫实例300例)(爬虫实战案例)

Scrapy 是一个完整的爬虫框架,由5个核心组件 2个中 间件组件组成。本文将主要对 Scrapy 项目的各组件进行说明。在爬虫项目中, 它的结构如下图所示。

(爬虫实例300例)(爬虫实战案例)

(1)spiders 文件夹:管理各种爬虫文件,每个网站具体的爬 取逻辑都写在各自的爬虫文件中。上图中的 movie.py 就是写了爬取豆瓣电影 Top250 的具体爬取逻辑。

(2)items.py :用来定义需要爬取的数据结构。

(3)main.py :用于调试和运行爬虫项目。

(4)middlewares.py : 已经预先定义了该爬虫项目的 Spider中间件(Spider Middleware)和下载中间件(Downloader Middleware)。Spiders Middlewares 是自定义扩展引擎和 Spider 中间通信的功能组件。例如,进入 Spider 的 response 和从 Spider 出去的 request,都可以在中间做 一些修改。Download Middlewares 是一个自定义扩展组件,是封装代理 IP、HTTP 等用于隐藏自己 的地方。

(5)pipelines.py :作用是将每一个 item 对象存储到 MySQL 或 MongoDB 数据库中。

(6)settings.py :对整个爬虫项目进行设置。

Scrapy 项目中各组件之间的数据流按如下过程进行交互:

(1)爬虫文件中 start_urls 的值被封装成请求(request)对象交给引擎(Engin)。一个 URL 对 应一个请求(request)对象。

(2)引擎(Engin)拿到请求(request)对象之后,将其全部交给调度器(Scheduler)。

(3)调度器(Scheduler)拿到所有请求(request)对象后,通过内部的过滤器过滤掉重复的 URL,最后将去重后的 URL 放入 request 队列中。

(4) 引 擎(Engin) 从调度器(Scheduler) 的队列中调度出一个 request 请求交给下载 器(Downloader)进行下载,其间会经过下载中间件(Downloader Middleware),使用 process_ request 方法进行处理。

(5) 当下载器(Downloader) 下载完成以后, 其间还会经过下载中间件(Downloader Middleware),使用 process_response 方法将 response 对象返回给引擎。

(6)引擎(Engin)将 response 对象交给爬虫 Spider 进行解析,解析成功后产生 item,随后 Spiders 将 item 交给引擎(Engin)。

(7)引擎(Engin)将 item 交给管道(Pipelines),管道(Pipelines)拿到 item 后进行数据的持 久化存储,存储到 MySQL 或 MongoDB 数据库。

(8)对于新的请求(request),Spider 会将新的请求(request)发送给引擎(Engin),然后引擎 (Engin)再将这些新的请求(request)发送到调度器(Scheduler)进行排队。然后重复(1)~(7) 操作,直到获取到全部的信息为止。

以上是关于 Scrapy 组件数据流走向的说明,仅供参考。

现在我们举个完整的案例(用PyCharm进行Debug和编译运行):

爬取豆瓣电影 Top250 第一页的前 3 名数据,包括电影序号、电影名称、 电影的介绍、电影星级、电影的评论数、电影的描述,最终结果输出为CSV文件,如下图所示:

(爬虫实例300例)(爬虫实战案例)

项目编写步骤如下:

(1)按“Win + R”快捷键,打开“运行”对话框,输入“cmd”,单击“确定”按钮,打开 CMD 命令行窗口,输入以下命令,用以建立项目名称:douban。

scrapy startproject douban

(2)定位到该项目:cd douban

(3)建立新的爬虫:movie:scrapy genspider movie movie.douban.com/top250

(4)打开 PyCharm,执行“File”→“Open”命令,选择该项目所在的位置,单击“Ok”按钮,定位到movie.py,结果如下图所示:

(爬虫实例300例)(爬虫实战案例)

(5)在 PyCharm 中选择 items.py,在 items.py 中定义好数据结构,代码如下:

(爬虫实例300例)(爬虫实战案例)

(6)在 setting.py 中设置 USER_AGENT,它的值可以在目标网页(https://movie.douban.com/ top250)中获取。在浏览器中打开目标网页,按“F12”键,选择“Network”选项卡,按“F5”键 刷新一下网页。选择 Name 是 top250 的,在其 Headers 中可以查看到当前浏览器的 User-Agent, 如下图所示:

(爬虫实例300例)(爬虫实战案例)

将浏览器中 User-Agent 的值复制到 setting.py 的 USER_AGENT 中,代码如下:

USER_AGENT = ' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'

(7)为了能够在 PyCharm 中实现调试和运行,在 douban 根目录下新建 main.py。在 main.py 中引 入 scrapy.cmdline 的 execute 方法,代码如下:

(爬虫实例300例)(爬虫实战案例)

(8)在 movie.py 中写爬虫数据的规则,代码如下:

(爬虫实例300例)(爬虫实战案例)

(9)调试查询是否取到前 3 个电影的信息,在 movie.py 中设置断点,如下图所示:

(爬虫实例300例)(爬虫实战案例)

在 main.py 中右击,在弹出的快捷菜单中选择“Debug 'main'”选项,就可以 Debug 运行。接下来,把鼠标移到 movie_list,可以看出是否获取到信息。如果获取到,则表示设置 的规则没错,如下图所示:

(爬虫实例300例)(爬虫实战案例)

从上面看出我们已经获取到了最终数据。如果想用 Excel 做数据可视化,就把最终数据保存为 CSV 文件,再导入 Excel 中,具体操作过程如下。

(1)在 pipleline.py 中定义类为 CsvExporterPipeline,具体代码如下:

(爬虫实例300例)(爬虫实战案例)

(2)在 settings.py 中,打开 ITEM_PIPELINES 通道,设置代码如下:

(爬虫实例300例)(爬虫实战案例)

(3)切换到 main.py 文件下并右击,在弹出的快捷菜单中选择“Run 'main'”选项,运行该项目。

(4)doubanmovie.csv 文件会在 douban 文件夹下生成,如下图所示。

(爬虫实例300例)(爬虫实战案例)

(5)到 douban 文件夹下,用 Excel 打开 movie.csv,最后把该文件另存为 Excel 格式。



声明:我要去上班所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,版权归原作者素手挽清风LINDA所有,原文出处。若您的权利被侵害,请联系删除。

本文标题:(爬虫实例300例)(爬虫实战案例)
本文链接:https://www.51qsb.cn/article/dvjk1t.html

(0)
打赏微信扫一扫微信扫一扫QQ扫一扫QQ扫一扫
上一篇2023-07-29
下一篇2023-07-29

你可能还想知道

发表回复

登录后才能评论