ajax动态加载数据的抓取

ajax异步加载

  • 特点
  • 抓取流程
  • 案例

特点

  1. 查看页面源代码,无数据一定是动态,有数据可能是静态或者抓包看有无XHR/对应的响应预览

  2. 局部请求加载数据,更新局部页面

  3. 请求返回页面包含动态js代码,浏览器解析执行js,动态的加载数据,直到页面渲染完成;
    若这类页面返回给python,就不能拿到数据,因为python无法执行js代码

  4. python 请求的内容写入文件,然后由浏览器打开,此时浏览器是加载不到动态数据的,此时有数据一定是静态页面。

看:
requests响应内容中是否有数据,有则静态页面
ajax动态加载数据的抓取_第1张图片

抓取流程

  1. F12抓包,页面发请求–>抓包

  2. 响应 j s o n 格 式 json格式 json的数据包
    XHR/General请求的url/QueryString规律

  3. 解析json字符串

import json
#解析json 字符串
dict_ = json.loads(res.text)
res.json()
json_str = json.dumps(dict_/list,ensure_ascii=False)
#从文件中解析
dict_ = json.load(f)#文件对象
json.dump(dict_,f,ensure_ascii=False)

案例

http://app.mi.com—>聊天社交—>应用名字&链接

1.请求http://app.mi.com,看是否有数据

import requests
headers = {"User-Agent":"xxx"}
url = "http://app.mi.com"

res = requests.get(url,headers=headers)#查看响应体中是否有社交类的数据

#没有则属于动态加载

#F12抓包--> XHR
#分析请求的url 结构
url1 = "https://app.mi.com/categotyAllListApi?page=0&categoryId=2&pageSize=30"
url2 = "https://app.mi.com/categotyAllListApi?page=1&categoryId=2&pageSize=30"
url3 = "https://app.mi.com/categotyAllListApi?page=2&categoryId=2&pageSize=30"
#发送请求,获取json数据

res = requests.get(url,headers=headers)
res.json()  #OK

你可能感兴趣的:(爬虫,ajax,python,requests)