转自 :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
如果在利用爬虫爬取网页数据的时候,发现是动态生成的时候,目前来看主要表现在以下几种:
以知乎为例,我们在爬取用户信息的时候,可能一开始的时候关注页面本身的内容,希望通过解析页面的结构来获取想要的数据,实际上我们利用fiddler这样的网络工具,很容易地发现这里面其实有一个用户信息的接口在里面,这样的话我们爬取用户的时候只需要关注此接口的逻辑就可以了。
如上图所示,上面的接口将用户的信息都返回过来,所以我们通过处理该结果的json格式数据就可以了。
splash是scrapy官方推荐使用的渲染引擎,能够实现并发渲染多个页面、为用户返回页面或者页面截图、在页面中执行自定义的javascript代码等。以京东的图书搜索为例,搜索list中的内容是通过javascript动态生成,我们要爬取其中的内容,就需要将数据渲染出来,利用splash可以很方便地做到这一点。下图是利用splash渲染的代码
你想通过python代码来判断数据是不是动态生成的,这个目前来说,不好实现,至于利用python进行抓包分析,获取数据的Request URL,这个实现起来复杂,而且没有必要,手动F12很快就能发现答案,数据是不是动态的,一目了然。静态的数据在网页源码中,动态数据不在网页源码中,对比网页显示内容和网页源码,很直观就发现了。
1.静态数据如下。
网页显示内容:
网页源码内容:
能在网页源码中找到对应的数据,则不是动态加载的。
2.动态数据如下。
网页显示内容:
而实际数据如图,不在网页源码中,动态加载数据:
至于动态数据URL的话,你可以直接抓包分析就行,实现起来很简单:
一般情况下,数据页面的URL参数都是有规矩可循的,一页一页的翻转,参数也是固定那几个参数,值的话,会按规律以此递增变化,但是有些网站会进行加密,这个你就要自己好好分析了。普通情况下,动态数据都是个json文件,通过json包或正则表达式都可以完成数据的提取,希望以上内容对你有所帮助吧。