ajax抓取网页内容(Ajax,全称为andXML,即异步的JavaScript和XML)
优采云 发布时间: 2022-03-21 11:10ajax抓取网页内容(Ajax,全称为andXML,即异步的JavaScript和XML)
Ajax,全称是Asynchronous JavaScript and XML,即异步JavaScript和XML。它不是一种编程语言,而是一种使用 JavaScript 与服务器交换数据并更新网页部分而不刷新页面和页面链接不改变的技术。
对于传统的网页,如果要更新它的内容,就必须刷新整个页面,但是使用Ajax,你可以在不刷新整个页面的情况下更新页面的内容。在这个过程中,页面实际上是在后台与服务器交互的。获取到数据后,通过JavaScript来改变网页,从而更新网页的内容。
您可以在 W3School 上体验一些示例来感受一下:。
1.示例介绍
在浏览网页时,我们会发现很多页面已经向下滚动以查看更多选项。比如以微博为例,我们以我的个人主页为例:切换到微博页面,一直往下滑,你会发现往下滑了几条微博,就不会再往下了,一加载就会而是出现。片刻之后,下方不断出现新的微博内容。这个过程其实就是Ajax加载的过程,如图6-1所示。
我们注意到页面并没有完全刷新,也就是说页面上的链接没有变化,但是页面中有新的内容,也就是后来刷新的新微博。这就是通过 Ajax 获取新数据并呈现的内容。
2. 基本原理
在初步了解了Ajax之后,我们再来详细了解一下它的基本原理。向网页更新发送Ajax请求的过程可以简单分为以下3个步骤:
(1) 发送请求;(2) 解析内容;(3) 渲染网页。
我们将在下面详细描述这些过程。
发送请求
我们知道JavaScript可以实现页面的各种交互功能,Ajax也不例外。也是用JavaScript实现的,实际执行如下代码:
var 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 中使用 requests 向服务器发起请求,然后得到响应的过程。那么返回的内容可能是 HTML,也可能是 JSON,然后你只需要在方法中使用 JavaScript 进行进一步处理即可。例如,如果是JSON,则可以解析转换。
渲染网页
JavaScript 具有更改网页内容的能力。解析响应内容后,可以调用 JavaScript 对网页进行解析处理。例如,通过document.getElementById().innerHTML等操作,可以改变元素中的源代码,从而改变网页上显示的内容。该操作也称为DOM操作,即对Document网页的Document操作,如更改、删除等。
上面的例子中,document.getElementById("myDiv").innerHTML=xmlhttp.responseText会将ID为myDiv的节点内部的HTML代码改成服务器返回的内容,这样服务器返回的内容将显示在 myDiv 元素内。使用新数据后,页面的某些部分似乎已更新。
我们观察到这3个步骤实际上是由JavaScript完成的,它完成了请求、解析和渲染的整个过程。
回想一下微博的pull-to-refresh,这其实就是JavaScript向服务端发送Ajax请求,然后获取新的微博数据,解析,呈现在网页中。
因此,我们知道,真正的数据实际上是从一次又一次的Ajax请求中获取的。如果你想捕获这些数据,你需要知道这些请求是如何发送的,发送到哪里,发送了什么参数。如果我们知道这一点,难道我们不能用 Python 来模拟这个发送操作并得到结果吗?
在下一节中,我们将学习在哪里可以看到这些后台 Ajax 操作,它是如何发送的,以及发送哪些参数。
以上是Ajax在Python3爬虫中使用的详细内容。关于Python3中Ajax是什么的更多信息,请关注上的其他相关话题文章!