1、爬取肯德基的所有餐厅信息 kfc.com.cn/kfccda/storelist/index.aspx
肯德基官网--餐厅查询--输入查询关键字--点击查询
发现地址栏没有发生变化,说明发送的是ajax请求
2、爬取国家药品监督管理局中基于中华人民共和国化妆品生产许可证相关数据
125.35.6.84:81/xk/
动态加载数据
首页中对应的企业信息数据是通过ajax动态请求得到的。
http://125.35.6.84:81/xk/itownet/portal/dzpz.jsp?id=0868a9efa23f4a18a5351e5f34b2b705
通过分析详情页url发现
--url的域名都是一样的,只有携带的参数(id)不一样
--id值可以从首页对应的ajax请求到json串中获取
--域名和id值拼接一个完整的企业对应的详情页面
详情页的数据也是靠动态加载出来的
http://125.35.6.84:81/xk/itownet/portal/dzpz.jsp?id=b77e2f05756c4479b8e61dfd0516d1e1
观察后发现:所有的post请求的url都是一样的,只有参数id值是不同的。
如果我们可以批量获取多家企业的id后,就可以将id和url形成一个完整的详情页
http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList
3、获取id,通过得到返回的json数据得到id
4、在线json解析工具 http://www.kjson.com/
import requests import json if __name__ == "__main__": url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36' } data = { 'n': 'true', 'page': '1', 'pageSize': '15', 'productName':'', 'conditionType': '1', 'applyname':'', 'applysn':'' } id_list = [] #存储企业的id all_data_list = [] #所有企业详情数据 json_ids = requests.post(url=url,headers=headers,data=data).json() for dic in json_ids['list']: id_list.append(dic['ID']) #根据id拼接ajax请求 #获取企业详情数据 post_url = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById" for id in id_list: data = { "id":id } detail_json = requests.post(url = post_url,headers=headers,data = data).json() #print(detail_json,'--------overing----------') all_data_list.append(detail_json) #持久化存储 fp = open("./allData.json",'w',encoding='utf-8') json.dump(all_data_list,fp=fp,ensure_ascii=False) print("over!!!!")
特别说明:这是根据老男孩IT学习所做的笔记,感谢佩奇老师,https://www.bilibili.com/video/BV11J411q73G