ajax抓取网页内容(照Web发展的趋势分析与趋势的发展趋势)
优采云 发布时间: 2021-09-20 21:26ajax抓取网页内容(照Web发展的趋势分析与趋势的发展趋势)
有时,当我们抓取收录请求的页面时,结果可能与在浏览器中看到的结果不同:正常显示的页面数据可以在浏览器中看到,但通过请求获得的结果却不一样。这是因为请求获取原创HTML文档,而浏览器中的页面是在JavaScript处理数据后生成的。这些数据来自各种来源,可以通过Ajax加载,收录在HTML文档中,也可以通过JavaScript和特定算法计算
对于第一种情况,数据加载是一种异步加载方法。最初,原创页面将不收录某些数据。加载原创页面后,它将从服务器请求一个接口以获取数据,然后数据将被处理并显示到web页面。实际上,它正在发送一个Ajax请求
根据网络发展的趋势,这种形式的网页越来越多。网页的原创HTML文档不收录任何数据。数据通过Ajax统一加载,然后呈现。这样,在web开发中,前端和后端可以分开,服务器直接呈现页面所带来的压力也可以减少
因此,如果您遇到这样的页面,您无法通过直接使用请求和其他库获取原创页面来获得有效的数据。此时,您需要分析web页面后台发送到接口的Ajax请求。如果可以使用请求来模拟Ajax请求,就可以成功地捕获它们
因此,本章的主要目的是了解什么是AJAX以及如何分析和获取AJAX请求
Ajax完全称为异步JavaScript和XML,是异步JavaScript和XML。它不是一种编程语言,而是一种使用JavaScript与服务器交换数据并更新某些网页而不刷新页面和更改页面链接的技术
对于传统web页面,如果要更新其内容,必须刷新整个页面,但使用Ajax,可以更新其内容,而无需刷新所有页面。在此过程中,页面实际上在后台与服务器交互。获取数据后,使用JavaScript更改网页,以便更新网页内容
您可以在w3school上体验几个示例:
1.实例介绍
浏览网页时,我们会发现许多网页有更多的选择。例如,以微博为例:/U/283067847。。。切换到微博页面,继续下降。可以发现,在几条微博倒下之后,不会有进一步的下跌。相反,将显示加载的*敏*感*词*。一段时间后,新的微博内容将继续出现在底部。这个过程实际上就是Ajax加载的过程,如图6-1所示
图6-1页面加载过程
我们注意到页面没有刷新,这意味着页面的链接没有改变,但是页面中有更多的新内容,也就是说,新微博后来被刷掉了。这是获取新数据并通过Ajax进行渲染的过程
2.基本原理
在初步了解Ajax之后,让我们进一步了解它的基本原理。向网页更新发送Ajax请求的过程可以简单地分为以下三个步骤:
(1)send-request;(2)parse-content;(3)render-web-page)
让我们详细介绍这些过程
发送请求
我们知道JavaScript可以实现页面的各种交互功能,AJAX也不例外,它也是通过JavaScript实现的,实际上执行了以下代码:
1234567891011121314var xmlhttp;if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest();} else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; }}xmlhttp.open("POST","/ajax/",true);xmlhttp.send();复制代码
这是JavaScript对最低级别Ajax的实现。事实上,它是一个新的XMLHttpRequest对象,然后调用onreadystatechange属性来设置监视器,然后调用open()和send()方法来链接(即服务器)。请求被发送。在Python中发送请求后,您可以得到响应结果,但这里请求是用JavaScript发送的。由于设置了侦听,所以当服务器返回响应时,会触发相应的onreadystatechange方法,然后在此方法中解析响应内容
解析内容
收到响应后,将触发onreadystatechange属性对应的方法。此时,可以使用xmlhttp的responseText属性获取响应内容。这类似于使用Python中的请求向服务器发送请求并获取响应的过程。然后返回的content可以是HTML或JSON。接下来,您只需要在方法中使用JavaScript进行进一步处理,例如,如果是JSON,则可以对其进行解析和转换
呈现网页
JavaScript能够更改网页的内容。解析响应内容后,您可以调用JavaScript根据解析的内容处理网页。例如,通过document.Getelementbyid().innerHTML可以更改元素中的源代码,使网页上显示的内容发生更改。此操作也称为DOM操作,即可以对文档网页文档进行更改、删除等操作
在上面的示例中,document.Getelementbyid(“mydiv”).InnerHTML=xmlhttp.responsetext将ID为mydiv的节点内的HTML代码更改为服务器返回的内容,这样服务器返回的新数据将显示在mydiv元素内,并且网页的某些内容将被更新
我们观察到这三个步骤实际上是由JavaScript完成的,JavaScript完成了请求、解析和呈现的整个过程
回想一下微博的下拉刷新。事实上,JavaScript向服务器发送一个Ajax请求,然后获取新的微博数据,对其进行解析,并将其呈现在网页中
因此,我们知道真正的数据实际上是通过Ajax请求获得的。如果您想捕获这些数据,您需要知道这些请求是如何发送的,发送到哪里,以及发送了哪些参数。如果我们知道这些,我们可以用Python模拟发送操作以获得结果吗
在下一节中,我们将学习在哪里可以看到这些背景Ajax操作,它们是如何发送的,以及发送了哪些参数
本资源来源于崔庆才的个人博客《精米:Python 3网络爬虫开发实用教程》|精米