特点
-
查看页面源代码,无数据一定是动态,有数据可能是静态或者抓包看有无XHR/对应的响应预览
-
局部请求加载数据,更新局部页面
-
请求返回页面包含动态js代码,浏览器解析执行js,动态的加载数据,直到页面渲染完成;
若这类页面返回给python,就不能拿到数据,因为python无法执行js代码 -
python 请求的内容写入文件,然后由浏览器打开,此时浏览器是加载不到动态数据的,此时有数据一定是静态页面。
看:
requests响应内容中是否有数据,有则静态页面
抓取流程
-
F12抓包,页面发请求–>抓包
-
响应 j s o n 格 式 json格式 json格式的数据包
XHR/General请求的url/QueryString规律 -
解析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