程序员怎么用网络爬虫获取js中的动态数据

Python
474
0
0
2022-06-04
标签   网络爬虫

上篇文章讲到抓取58网页租房数据, 有朋友问如果是通过ajax请求生成的动态网页这么抓取数据。 其实方法不难, 总结下就两条途径:

  1. 直接用python运行JavaScript代码采集返回的数据
  2. 用python的第三方库解释执行整个页面的html和JavaScript生成最终网页后, 再采集数据

由于第一种方法python执行js代码非常慢且操作相对复杂,而第二种方法通过处理后可变为对静态网页采集数据, 所以第二种方式更为常用

用第二种方式采集动态网页,这里主要用到了两个第三方库:Selenium和PhantomJS。Selenium是一个强大的网络数据采集工具,需要和第三方浏览器配合使用,PhantomJS是一个浏览器, 它会把网站加载到内存并执行页面上的JavaScript代码, 但不会向用户展示图形界面。 我们把Selenium和PhantomJS结合起来, 就可以轻松解决采集动态页面数据的问题。具体安装方法请百度。

这里以前面写的一个微信商城网页为例, 讲述如何获取动态网页数据, 界面是这个样子的:

程序员怎么用网络爬虫获取js中的动态数据

这个页面加载数据的过程是这样的:静态网页里只有标题栏和底部tab栏, 页面显示完成后会通过ajax方式从服务器获取商品数据并用js显示出来, 我要做的就是通过Selenium和PhantomJS获取到商品数据。

如果用之前抓取静态网页的方法,代码这样写:

程序员怎么用网络爬虫获取js中的动态数据

运行上面的代码后, 输出结果是这样的, 商品列表为空

程序员怎么用网络爬虫获取js中的动态数据

用selenium配合PhantomJS的方法, 代码这样写:

程序员怎么用网络爬虫获取js中的动态数据

运行上面代码后, 通过ajax动态获取到的数据网络爬虫也能获取到了

程序员怎么用网络爬虫获取js中的动态数据

  • 具体的selenium api可以上官网查看。写文之余庆幸我们生活在这样一个互联网高度发达、技术人员有高度分享精神的年代,我们得以在各大神前辈提供的三方库的基础上写出各种新奇的应用。希望此文能抛砖引玉, 同大家共同学习。