scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解

2022-10-1820:12:31云计算与物联网Comments689 views字数 1878阅读模式

怎么爬取动态网页?之前学习requests模块的时候,我们借助于Ajax请求,获取动态加载的数据,后来学习了selenium,我们也可以轻松获取动态加载的网页,那么scrapy怎么获取动态加载的内容呢?我们接下来以一个案例:爬取网易新闻数据为例,来介绍怎么爬取动态加载的内容,其中会涉及到的知识点包括下载器中间件。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

1.下载器中间件是什么?

 

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

中间件是Scrapy里面的一个核心概念。使用中间件可以在爬虫的请求发起之前或者请求返回之后对数据进行定制化修改,从而开发出适应不同情况的爬虫。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

2.爬取网易新闻思路讲解

 

目的:获取国内、国际、军事新闻板块中所有的新闻标题以及对应的新闻内容文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

1)我们要想获取想要的数据内容,就需要先对首页发起请求解析得到列表页的url文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

2)然后我们再对列表页发起请求解析获得详情的地址文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

3)最后通过第二步获得的详情的地址获得详情页的内容文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

4)难点:第一步正常发请求解析数据,第二步,我们会发现列表页的数据是动态加载的数据,因此我们无法运用解析数据获得详情页的url,因此需要借助下载器中间件来获取动态加载的内容。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

怎么爬取网易新闻内容。首先我们通过对首页发送请求获取到板块的链接地址。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

1.对首页发送请求

 

我们讲地址改为我们需要爬取的首页内容地址文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

 

2.获取板块的链接地址。

 

1)我们通过查看代码可以看到,我们需要的板块信息事在li标签中存储,因此我们先定位到li标签文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

2)然后我们可以通过不同的li标签定位到不同的板块,我们首先新建一个列表,存放板块在li标签中的位置,再通过解析获取所想要的板块链接文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

3)我们获取到了5个板块的链接,那么我们新建一个列表把这些链接存储在列表中文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

 

3.对板块列表页发送请求

 

我们通过上一步获得到了列表页的链接,就可以对列表页发送请求了,通过yield关键字可以发送请求文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

 

4.对板块列表页解析数据

 

我们要想获取详情页的内容,需要对列表页解析获得详情页的URL地址,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

因此我们定义一个名为urls_parse的函数,用于解析数据,在上一步callback中我们已经说明了列表页解析使用urls_parse的函数文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

 

5.下载中间件的编写

 

我们这一步正常来说是可以解析到数据的,但是我们通过上一节课的分析知道,列表页是动态加载数据,无法直接通过scrapy获取,需要借助于中间件,因此我们下节课重点根据案例详细介绍中间件怎么写,才能获取我们想要的数据。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

我们列表页无法直接获取数据,因为是动态加载页面,因此需要借助中间件来完成我们的案例。接下来我们开始中间件的介绍。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

1.首先我们打开中间件文件(如下图)

 

中间件文件打开,我们会发现有很多函数和类,我们只保留一个类(DownloaderMiddleware)和三个函数(process_request、process_response、process_exception),它们分别代表着请求、相应和异常。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

 

2.修改响应函数

 

由于我们列表页是动态加载的数据因此,我们通过一般途径无法获取的是响应数据,因此我们对响应函数进行修改。我们知道我们会得到6个相应数据,分别是,首页以及列表5个板块的响应数据,我们目的是对5个板块的响应数据进行修改,因此我们设置条件进行过滤,如果请求的URL,在蜘蛛抓取的URL中,那么我们获取新的响应数据文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

 

3.获取新的响应数据

 

我们需要导入一个函数,这个函数我们需要获得几个数据:URL是我们过滤的URL,body使我们获取的响应数据文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

 

4.body的获取

 

1)body是我们需要获取的响应数据,怎么获取动态响应数据呢?用selennim!首先在爬虫文件夹中导入selennim,并实例化浏览器文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

2)然后再中间件文件中导入实例化的浏览器,并发送请求,就获取到了响应数据文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

接下来就可以正常的通过scrapy解析数据了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

1.详情页的链接获取

 

通过解析获得了详情的标题和链接文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

2.对详情页发送请求文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

通过yield关键字对详情页发送请求文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

 

3.对详情页解析数据

 

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

 

4.将标题及内容,设置在item中

 

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

 

5.将标题及内容进行封装

 

首先将标题封装到item中,其次由于标题及内容在不同的解析数据中因此,使用meta关键字,然后在内容解析数据中导入meta关键字,并封装到item中文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

 

6.将item提交给管道,管道内容自行设置

 

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

 

7.设置开启管道

 

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

 

8.将浏览器关闭

 

scrapy实例进阶:怎么爬取动态网页?下载器中间件是什么?爬取网易新闻思路讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

这样我们就把网易新闻的案例讲解完了,主要的难点在于中间操作,中间件需要先找到需要调整的数据,并利用selenim进行获取数据,两者的配合最终得到动态加载的数据,其他的操作跟我们之前的翻页获取以及深度爬取数据操作是一样的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28297.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/yunda/28297.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定