Python3爬虫中Ajax的用法


Posted in Python onJuly 10, 2020

Ajax,全称为Asynchronous JavaScript and XML,即异步的JavaScript和XML。它不是一门编程语言,而是利用JavaScript在保证页面不被刷新、页面链接不改变的情况下与服务器交换数据并更新部分网页的技术。

对于传统的网页,如果想更新其内容,那么必须要刷新整个页面,但有了Ajax,便可以在页面不被全部刷新的情况下更新其内容。在这个过程中,页面实际上是在后台与服务器进行了数据交互,获取到数据之后,再利用JavaScript改变网页,这样网页内容就会更新了。

可以到W3School上体验几个示例来感受一下:http://www.w3school.com.cn/ajax/ajax_xmlhttprequest_send.asp。

1. 实例引入

浏览网页的时候,我们会发现很多网页都有下滑查看更多的选项。比如,拿微博来说,我们以我的个人的主页为例:https://m.weibo.cn/u/2830678474,切换到微博页面,一直下滑,可以发现下滑几个微博之后,再向下就没有了,转而会出现一个加载的动画,不一会儿下方就继续出现了新的微博内容,这个过程其实就是Ajax加载的过程,如图6-1所示。

Python3爬虫中Ajax的用法

我们注意到页面其实并没有整个刷新,也就意味着页面的链接没有变化,但是网页中却多了新内容,也就是后面刷出来的新微博。这就是通过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.getElementById("myDiv").innerHTML=xmlhttp.responseText便将ID为myDiv的节点内部的HTML代码更改为服务器返回的内容,这样myDiv元素内部便会呈现出服务器返回的新数据,网页的部分内容看上去就更新了。

我们观察到,这3个步骤其实都是由JavaScript完成的,它完成了整个请求、解析和渲染的过程。

再回想微博的下拉刷新,这其实就是JavaScript向服务器发送了一个Ajax请求,然后获取新的微博数据,将其解析,并将其渲染在网页中。

因此,我们知道,真实的数据其实都是一次次Ajax请求得到的,如果想要抓取这些数据,需要知道这些请求到底是怎么发送的,发往哪里,发了哪些参数。如果我们知道了这些,不就可以用Python模拟这个发送操作,获取到其中的结果了吗?

在下一节中,我们就来了解下到哪里可以看到这些后台Ajax操作,去了解它到底是怎么发送的,发送了什么参数。

以上就是Python3爬虫中Ajax的用法的详细内容,更多关于Python3中Ajax是什么的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python使用PyGreSQL操作PostgreSQL数据库教程
Jul 30 Python
用python实现简单EXCEL数据统计的实例
Jan 24 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 Python
解决Python3.5+OpenCV3.2读取图像的问题
Dec 05 Python
快速排序的四种python实现(推荐)
Apr 03 Python
Python3.5文件修改操作实例分析
May 01 Python
anaconda如何查看并管理python环境
Jul 05 Python
django框架forms组件用法实例详解
Dec 10 Python
Python利用全连接神经网络求解MNIST问题详解
Jan 14 Python
Python3.9新特性详解
Oct 10 Python
Python结合百度语音识别实现实时翻译软件的实现
Jan 18 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
Mar 04 Python
Python3爬虫中Selenium的用法详解
Jul 10 #Python
Python3爬虫中Splash的知识总结
Jul 10 #Python
Python3爬虫里关于Splash负载均衡配置详解
Jul 10 #Python
python3爬虫中异步协程的用法
Jul 10 #Python
浅析Python面向对象编程
Jul 10 #Python
Python爬虫小例子——爬取51job发布的工作职位
Jul 10 #Python
Python 如何对文件目录操作
Jul 10 #Python
You might like
PHP 函数语法介绍一
2009/06/14 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
2015/12/22 PHP
Laravel 5.3 学习笔记之 错误&日志
2016/08/28 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
laravel 自定义常量的两种方案
2019/10/14 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
改变隐藏的input中value的值代码
2013/12/30 Javascript
如何在MVC应用程序中使用Jquery
2014/11/17 Javascript
个人网站留言页面(前端jQuery编写、后台php读写MySQL)
2016/05/03 Javascript
最佳的JavaScript错误处理实践
2016/07/16 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
2018/04/25 Javascript
vue-cli项目使用mock数据的方法(借助express)
2019/04/15 Javascript
python之Socket网络编程详解
2016/09/29 Python
Python微信公众号开发平台
2018/01/25 Python
python装饰器深入学习
2018/04/06 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
python样条插值的实现代码
2018/12/17 Python
如何用C代码给Python写扩展库(Cython)
2019/05/17 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
John Varvatos官方网站:设计师男士时装
2017/02/08 全球购物
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
新西兰演唱会和体育门票网站:Ticketmaster新西兰
2017/10/07 全球购物
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
金士达面试非笔试
2012/03/14 面试题
历史专业学生的自我评价
2014/02/28 职场文书
酒店保安领班职务说明书
2014/03/04 职场文书
护士医德医风自我评价
2014/09/15 职场文书
2014年电教工作总结
2014/12/19 职场文书
三年级上册科学教学计划
2015/01/21 职场文书
python生成可执行exe控制Microsip自动填写号码并拨打功能
2021/06/21 Python
Java实现多线程聊天室
2021/06/26 Java/Android
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers