回答一个同学的提问,为什么网站中的数据,明明BeautifulSoup,XPath写提没有问题,却没有抓取到数据,如何决判断这个数据是异步加载的,异步加载的包怎么找?
1、现在很多网页都采用了异步加载的方式(Ajax),好处可以大大提高网站响应速度和用户体验度。
AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。
AJAX = 异步 JavaScript和XML(标准通用标记语言的子集)。
AJAX 是一种用于创建快速动态网页的技术。
通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面。
一般的做法是,当前网页的主要信息内容会首先加载进来,大的图片,非本页面核心相关的内容稍后异步的方式加载进来(json数据)
这是简页首页,大家看到打开首页时,向服务器发送了93个请求,包括首页document, js(javascript), 图片,和json数据。
对于首页来说,用户首先要看到的是热门文章,所以右边的推荐作者就是异步加载进来的
我们用chrome右键检查时,比较容易找到这个异步的请求,返回的就是json,找的方法,就是看请求Name 和 type,排除图片和js再看名称,基本就能确定下来,简书代码也是相当整洁优雅,看名字 recommended?page=1&per_page=5
这个就是页面上的右边的推荐作者。
不过从这个页面的抓取来说,首页我们关注的数据是文章,文章URL和阅读量,评论数,点赞数和文章作者。在一个页面我们不会去处理推荐作者的数据信息。
这里就是一个分析。上次视频中Young在这里讲到分析这个URL,可以快速抓取到所有推荐作者的信息。有兴趣的同学也可以对推荐作者的信息进行一下分析。
另外还要说明一点:使用chrome右键检查工具,是能够找到异步加载的数据的标签 ,xpath路径的,但是如果是用页面的URL去抓取数据肯定是获取这个内容的,因为数据都还没有进来。而chrome的右键检查,在页面所有数数据加载完成了。无论是同步数据,异步加载的数据最后都会渲染在网页中的,也就是有一样的样式,能够找到它的标签或xpath。
而在网页中右键源代码的方式查看,一般看的是一次请求的源代码,这时是你看异步加载的数据。如果你网页比较熟悉或者看得比较有,有些网页内容很多,你右键查看源代码,可能没有这么多内容或者代码比较少,仔细看一下,这可能是一个框架页面(之前用得比较多点)。
所以检查一个页面中的数据哪些是异步请求(大家俗称是“包”),要确定哪些是“包”,一是多分析网络请求,二是掌握页面的一些规律。
大家可以对比分析一下拉钩网的职位数据抓取。
2、遇到一些异步加载的数据,怎么也找不到包怎么办?
大家可以看一下58岗位的抓取时,这个岗位的 浏览量和申请人数,会发现这个也是一个异步数据。(这种也是一个网页特点)
但是这个异步数据的“包”,真找不到(可能藏在某个js的请求中)
如果需要这个数据怎么办,就只能用其他方法。可以参考 http://www.jianshu.com/p/3abbc259f55a
总之,分析网页,分析请求,确定类型,快速用不同方式去尝试。这也大概是爬虫学习和数据抓取的魅力。你可能每次遇到的问题都不太一样。