Ajax数据爬取

Ajax的基本原理

菜鸟教程的代码为例:

  • XMLHTTPRequest对象是JS对Ajax的底层实现:
    var xmlhttp;
if (window.XMLHttpRequest)
{
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xmlhttp=new XMLHttpRequest();
}
else
{
// IE6, IE5 浏览器执行代码
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
  • 调用onreadystatechange属性实现响应监听:
    xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
  • 调用open()和send()方法向服务器发送请求:
	xmlhttp.open("GET","/try/ajax/ajax_info.txt",true);
xmlhttp.send();

综上,Ajax数据爬取的关键是JS分析,只要找到JS的请求参数,我们就能模拟Ajax请求,从而得到响应数据

Ajax分析方法

查看请求

在开发者工具的“网络/Network”模块下查看所有请求和响应,其中,type为xhr的就是Ajax请求。随着我们与网页的不断互动,这些请求会不断增加。

在请求的具体内容中,我们可以看到它的Request Headers中有一个X-Requested-With: XMLHttpRequest的属性。

分析请求

看请求:

Ajax数据爬取

看响应:

Ajax数据爬取

模拟请求

from urllib.parse import urlencode  # 用来把参数字典快速转化成url
import requests
from pyquery import PyQuery as pq base_url = 'https://m.weibo.cn/api/container/getIndex?' # 在Headers选项卡下的General栏中看到 headers = {
'Host': 'm.weibo.cn', # host参数指明了请求的目的地
'Referer': 'https://m.weibo.cn/u/2830678474', # 这个参数可以在控制台的请求头里看到
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest', # 这个参数是Ajax请求的标志
} def get_page(page):
params = {
'type': 'uid',
'value': '2830678474',
'containerid': '1005052830678474',
#'since_id': '4364324522484439', # 控制翻页的参数
}
url = base_url + urlencode(params) # 利用urlencode把参数字典快速转化成url
try:
response = requests.get(url, headers=headers) # 其他操作与普通请求一致
if response.status_code == 200:
return response.json()
except requests.ConnectionError as e:
print('Error', e.args) get_page(1)
上一篇:Sublime Text SFTP 注册码,亲测有效,SVN注册码


下一篇:Leetcode Candy