php抓取网页动态数据(2017年国家*敏*感*词*考试行测备考:动态网页(一))
优采云 发布时间: 2022-02-19 02:02php抓取网页动态数据(2017年国家*敏*感*词*考试行测备考:动态网页(一))
###每个句子:
一个人只要在寻求什么,他就不会老。一个人不会老,直到遗憾取代了梦想。
动态网页简介:
我们在编写爬虫的时候,可能会遇到以下两个问题:
出现这个问题的原因是你爬的页面是动态加载的,是动态网页。
所谓动态网页,是指相对于静态网页的一种网页编程技术。对于静态网页,随着html代码的生成,页面的内容和显示效果不会改变。动态网页并非如此。显示的页面是Javascript处理数据的结果,可以更改。这些数据有多种来源,可能由 Javascript 计算生成或通过 Ajax 加载。
一种经常用于动态网页的技术是 Ajax 请求技术。
目前越来越多的网站采用这种动态加载网页的方式。首先,它可以将web开发的前后端分离,减少服务器直接渲染页面的压力。其次,它可以用作反爬虫。的手腕。
爬虫处理动态页面的两种方式 selenium 模拟浏览器
下面以新浪读书文摘的网站为例(Ajax请求技术的典型应用),用这两种方式来介绍爬虫是如何处理这个动态页面并获取所需数据的。
逆向工程:
对于动态加载的网页,如果我们想要获取它们的网页数据,我们需要了解网页是如何加载数据的。这个过程称为逆向工程。
对于使用Ajax请求技术的网页,我们可以找到Ajax请求的具体链接,直接获取Ajax请求获取的数据。
对于这两种方法,只要创建并返回XMLHTTPRequest对象,就可以通过Chrome浏览器的调试工具在NetWork窗口中设置XHR过滤条件,直接过滤掉Ajax请求的链接;如果是$.ajax(),并且指定了dataType,如果是script或者jsonp,则无法通过这种方式过滤掉。
例子:
下面以新浪读书文摘为例,介绍如何获取无法过滤掉的ajax请求链接:
在Chrome中打开网页,右键查看,会发现首页的书摘列表收录在一个id为subShowContent1_static的div中,查看网页源码会发现该div id 为 subShowContent1_static 的为空。
单击更多摘录或下一页时,网页 URL 没有更改。
与我们前面提到的两种情况相同。
F12打开调试工具,打开NetWork窗口*(功能是记录浏览器的网络活动)*,F5刷新,可以看到浏览器收发的数据记录:
事实上,我们正在寻找的 Ajax 请求链接就是其中之一。
首先设置 XHR 过滤器:
如果发现为空,则可以推断该网页使用的ajax请求的dataType应该设置为script或者jsonp。
重新打开调试工具,点击网页上的More Book Excerpts。发现NetWork窗口中有很多记录,网页上有新内容,说明浏览器已经向服务器发送了请求。
在网页上,右键单击以检查更多摘录,并观察绑定到辅助元素的 JavaScript 事件:
根据JavaScript的知识:javascript:是一个伪协议,意思是当它被触发时,执行一段JavaScript代码,而javascript:; 表示不执行任何操作,因此单击时不会发生任何事情。但一般这种情况下,会绑定一个事件回调来执行业务。
接下来需要在网页的JavaSCript代码中找到更多书籍摘录触发的回调函数。
右键查看网页源码,Ctrl+F搜索“subShowContent1_loadMore”(多书摘录的id),发现并没有相关的具体函数:
这意味着更多书摘的回调函数不在网页本身编写的JavaScript代码中,所以应该在网页嵌入的JS文件中(通过