【python爬虫】动态加载页面的解决办法

现在很多的web页面使用ajax技术动态加载页面。但对于爬虫来说,目标数据很可能不在页面HTML源码中(右键查看网页源代码,通过F12查找),针对静态页面的爬虫不再满足现在的需求。

很多教程都推荐用Selenium和PhantomJS配合使用,实现网页的渲染,得到网页的全部信息。但是对于爬虫程序,模拟浏览器内存开销实在是非常大,而且效率低

好消息是,大多是是浏览器会在请求和解析HTML之后,根据js的“指示”再发送一次请求,得到页面展示的内容,然后通过js渲染之后展示到界面。这样的请求往往得到的内容是json格式的,所以我们非但不会加重爬虫的任务,反而可能会省去解析HTML的功夫。

本文以爬取instagram上的某位明星上传的全部图片为例讲解动态加载页面的解决办法。

工具:Chrome

包:json,requests,urllib

分析ins页面

打开某用户ins主页(https://www.instagram.com/urnotchrislee/?hl=zh-cn)可以看到,首页只加载了12张图片,要点击“更多”才会加载更多的图片。我们先获取这12张图片的URL。

获取前12张图片的URL

首先检查源码中是否存在图片的URL。在script标签中发现前12张图片的URL。

有了这个发现,我们就可以提取首页的12张图片URL!!

通过使用lxml库实现解析,不了解lxml的童鞋可以去崔大神的博客 学习学习。

获取更多图片的URL

在点击“更多”按键时,发现XHR选项卡(有时候在js选项卡中)中加载了一些新文件。

每一次下拉页面都会加载出12张图片,“?query_id”文件也会增加一个!

解决方法:
1、复制该js文件网址
2、再点击几次加载
3、复制多出来的几个js文件网址
4、对比几个js文件的网址,发现有翻页数字
5、按照规律,得到列表页的网址
6、复制某个js文件网址,浏览器访问,返回json数据。在json数据(网页源文件)中通过正则表达式匹配出文章详情页网址。

作者:小透明苞谷
链接:https://www.jianshu.com/p/b4ed706fc627
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。