python爬虫如何获取网页信息时,发现所需要的信息是动态生成的,然后抓包获取到信息来源的URL?

转自 :https://www.wukong.com/answer/6551337387799085316/?iid=43974241203&app=news_article&share_ansid=6551337387799085316&app_id=13&tt_from=mobile_qq&utm_source=mobile_qq&utm_medium=toutiao_ios&utm_campaign=client_share

 

如果在利用爬虫爬取网页数据的时候,发现是动态生成的时候,目前来看主要表现在以下几种:

以接口的形式生成数据,这种形式其实挺好处理的,比较典型的是知乎的用户信息,我们只要知道接口的URL,就可以不用再考虑页面本身的内容

以知乎为例,我们在爬取用户信息的时候,可能一开始的时候关注页面本身的内容,希望通过解析页面的结构来获取想要的数据,实际上我们利用fiddler这样的网络工具,很容易地发现这里面其实有一个用户信息的接口在里面,这样的话我们爬取用户的时候只需要关注此接口的逻辑就可以了。

python爬虫如何获取网页信息时,发现所需要的信息是动态生成的,然后抓包获取到信息来源的URL?_第1张图片

如上图所示,上面的接口将用户的信息都返回过来,所以我们通过处理该结果的json格式数据就可以了。

动态生成的内容直接写入到网页中,这个时候需要渲染引擎来帮助我们将javascript的执行结果渲染出来,splash正是我们需要的引擎,能够方便快捷地帮助我们将javascript的内容渲染出来

splash是scrapy官方推荐使用的渲染引擎,能够实现并发渲染多个页面、为用户返回页面或者页面截图、在页面中执行自定义的javascript代码等。以京东的图书搜索为例,搜索list中的内容是通过javascript动态生成,我们要爬取其中的内容,就需要将数据渲染出来,利用splash可以很方便地做到这一点。下图是利用splash渲染的代码

python爬虫如何获取网页信息时,发现所需要的信息是动态生成的,然后抓包获取到信息来源的URL?_第2张图片

总之,针对不同的形态,我们需要先了解清楚相应的实现原理,然后根据实现原理采取相应的方案来爬取我们需要的数据。

 

你想通过python代码来判断数据是不是动态生成的,这个目前来说,不好实现,至于利用python进行抓包分析,获取数据的Request URL,这个实现起来复杂,而且没有必要,手动F12很快就能发现答案,数据是不是动态的,一目了然。静态的数据在网页源码中,动态数据不在网页源码中,对比网页显示内容和网页源码,很直观就发现了。

1.静态数据如下。

网页显示内容:

python爬虫如何获取网页信息时,发现所需要的信息是动态生成的,然后抓包获取到信息来源的URL?_第3张图片

网页源码内容:

python爬虫如何获取网页信息时,发现所需要的信息是动态生成的,然后抓包获取到信息来源的URL?_第4张图片

能在网页源码中找到对应的数据,则不是动态加载的。

2.动态数据如下。

网页显示内容:

python爬虫如何获取网页信息时,发现所需要的信息是动态生成的,然后抓包获取到信息来源的URL?_第5张图片

而实际数据如图,不在网页源码中,动态加载数据:

python爬虫如何获取网页信息时,发现所需要的信息是动态生成的,然后抓包获取到信息来源的URL?_第6张图片

至于动态数据URL的话,你可以直接抓包分析就行,实现起来很简单:

python爬虫如何获取网页信息时,发现所需要的信息是动态生成的,然后抓包获取到信息来源的URL?_第7张图片

一般情况下,数据页面的URL参数都是有规矩可循的,一页一页的翻转,参数也是固定那几个参数,值的话,会按规律以此递增变化,但是有些网站会进行加密,这个你就要自己好好分析了。普通情况下,动态数据都是个json文件,通过json包或正则表达式都可以完成数据的提取,希望以上内容对你有所帮助吧。

你可能感兴趣的:(python,爬虫)