AJAX即“Asynchronous JavaScript And XML”(异步JavaScript和XML)可使网页实现异步更新,就是不从新加载整个网页的状况下,对网页的某部分进行更新(局部刷新)。传统的网页(不使用AJAX)若是须要更新内容,必须重载整个网页页面。html
AJAX = 异步JavaScript和XML,是一种新的思想,整合以前的多种技术,用于建立快速交互式网页应用的页面开发技术。ajax
同步现象:客户端发送请求到服务器端,当服务器返回响应以前,客户端都处于等待卡死状态。chrome
异步现象:客户端发送请求到服务器端,不管服务器是否返回响应,客户端均可以随意作其余事情,不会被卡死。json
1.1使用JavaScript得到浏览器内置的AJAX引擎(XMIHttpRequest对象)浏览器
1.2经过AJAX引擎肯定请求路径和请求参数服务器
1.3通知AJAX引擎发送请求异步
AJAX引擎会在不刷新浏览器地址栏的状况下,发送请求函数
2.1服务器得到请求参数工具
2.2服务器处理请求参数(添加、查询等操做)post
2.3服务器响应数据给浏览器
AJAX引擎得到服务器响应的数据,经过执行JavaScript的回调函数将数据传递给浏览器页面。
3.1经过设置给AJAX引擎的回调函数得到服务器响应的数据
3.2使用JavaScript在指定的位置,显示响应数据,从而局部修改页面的数据,达到局部刷新目。
目前不少网站都使用ajax技术动态加载数据,和常规的网站不同,数据时动态加载的,若是咱们使用常规的方法爬取网页,获得的只是一堆html代码,没有任何的数据。
import requests from urllib.parse import urlencode url = 'http://www.baidu.com/' headers = { 'USER-AGENT':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' } response = requests.get(url,headers=headers) print(response.text)
上面的代码是爬取百度首页,并打印出get方法返回的文本内容以下图所示,只有一堆网页代码,没有任何新闻信息。
内容过多,只截取部份内容,有兴趣的朋友能够执行上面的代码看下效果。
对于使用ajax动态加载数据的网页要怎么爬取呢?咱们先看下百度是如何使用ajax加载数据的。经过chrome的开发者工具来看数据加载过程。
首先打开chrome浏览器,打开开发者工具,点击Network选项,点击XHR选项,而后输入网址:https://www.baidu.com/,点击Preview选项卡,就会看到经过ajax请求返回的数据,Name那一栏就是ajax请求,当鼠标向下滑动时,就会出现多条ajax请求:
经过上图咱们知道ajax请求返回的是json数据。
爬取AJAX有两种方式:
1.直接分析AJAX调用的接口。而后经过代码请求这个接口。
2.使用selenium+浏览器驱动模拟浏览器行为获取数据。
分析接口:
优势:直接能够请求到数据。不须要作一些解析工做。代码量少,性能高。
缺点:分析接口比较负责,特别是一些经过JS混淆的接口,要有必定的JS功底。容易被发现是爬虫。
selenium:
优势:直接模拟浏览器的行为。浏览器能请求到的,使用selenium也能请求到。爬虫更稳定。
缺点:代码量多。性能低。
分析接口的案例呢,就找了下大佬写的案例了。
selenium案例我会在下一章写出来的。