作者:霍任芳 | 来源:互联网 | 2023-05-18 15:32
许多人在遇到网页动态加载数据的时候都习惯于使用seleniumwebdriver这款自动化测试工具,对接上浏览器驱动可以实现对javascript代码的逆向解析。但这种方式有1个明显的弊端:性
许多人在遇到网页动态加载数据的时候都习惯于使用selenium webdriver这款自动化测试工具,对接上浏览器驱动可以实现对Javascript代码的逆向解析。但这种方式有1个明显的弊端:性能太差。更重要的是,其采集效率的下限很大程度上并不取决于数据采集者,而是取决于网页上有多少Javascript代码,如果这些代码很多,那么我们的网络爬虫运行端就需要耗费更多的资源来解析这些Javascript代码;然而,如果说10万行Javascript代码中只有1000行是加载数据的代码,那就非常不划算了……
解决这种问题最好的办法就是直接把Javascript中加载的数据采集下来,避免运行庞大的selenium webdriver和各种浏览器驱动,也避免解析过多无关的Javascript代码。毫无疑问,采集数据的性能会大幅度上升,也省下了许多资源。
以上就是不使用selenium webdriver的好处。下面来说说具体怎么去实现。
FireFox浏览器大家都知道,前端开发者们也都应该知道这个浏览器有个FireBug插件十分有助于调试前端代码,在爬虫开发者们的眼中,这个插件还对编写网络爬虫有很大的帮助,其灵活性能够让开发者迅速追踪到网页动态加载的数据。
一、安装FireBug插件
这里网上有很多资料,百度经验可以直接找到。最新版本的FireFox浏览器上默认安装有FireBug插件,不需要手动安装;老版本的FireFox安装方法见百度经验,这里不详细说明。这个插件安装完成后,打开FireFox浏览器,按下F12会弹出调试器,这就是我们的FireBug了,说明我们安装成功了。
二、使用FireBug进一步分析爬取目标
上图所示是网页中通过ajax请求得到的json格式数据,也就是动态加载的数据,现在把这些数据复制下来,粘贴到json viewer工具中,可以得到一个被json格式化以后的json对象视图,方便分析数据结构。但有时出来的json数据中有大量空格换行,导致json viewer解析不出来,所以我更推荐直接在FireBug中,查看json对象数据。如下图:
三、使用提取json数据
在FireBug中查看到了返回Ajax回调的JSON数据的那个请求URL以后,就意味着:请求该URL可以获取其返回的JSON格式数据。
http://aigaogao.com/tools/action.aspx?act=sdc
把这段URL复制到浏览器的地址栏中,回车。可以看到我们要的数据。
import requests
url='http://aigaogao.com/tools/defaulttools.html'
result=requests.get(url)
html=result.content
print html
运行以上代码,我们可以得到图片中同样的数据。
至此,便实现了对动态网页的逆向工程。不需要渲染js代码也能获取到动态加载的数据。