python爬取三元组数据笔记(三)
需求:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据
http://125.35.6.84:81/xk/
分析:首先确定页面上的信息是那个url响应的。我们直接导入http://125.35.6.84:81/xk/ 的url发现没有数据。在network中寻找真正的url地址,发现信息是由ajax请求的。
其次,打开链接详情页
url的域名都是一样的,只有携带的参数(id)不一样
id值可以从首页对应的ajax请求到json串中获取
域名和id值拼接处一个完整的企业对应的详情页的url
详情页中的页面信息,也是动态加载的,对应ajax请求的数据包,可以捕获出来。
打开多个页面的详情信息,发现,所有的post请求的url都是一样的,只有id值不同
思路:由前台界面批量获取id后,再将id与url合成一个完整的新的url域名,再次进行ajax
请求就可以得到页面的详情信息。
由于目前无法打开网址界面,所以url里面是文字形式
import requests
import json
if __name__ == '__main__':
#h获取不同企业的id值
url = '首页面的网址'
# UA伪装
headers = {
'User-Agent': ''
}
all_data_list = [] # 存储企业的id
#参数的封装
#循环获取所有页面的id
for page in range(1,327):
page = str(page)
data = {
'on' : 'true',
'page':page,
'pageSize':'15',
'productName':'',
'conditionType':'1',
'applyname':'',
'applysn':'',
}
json_ids = requests.post(url=url,headers=headers,data=data).json()
for dic in json_ids['list']:
id_list.append(dic['ID'])#获取ID
#获取企业详情数据
post_url = '点击详情页的时候获取的url'
for id in id_list:#遍历id_list数组
data = {
'id':id
}
detail_json = requests.post(url=post_url,headers=headers,data=data).json()
#print(detail_json)
#持久化存储all data list
all_data_list.append(detail_json)
fp = open('./allData.json','w',encoding='utf-8')
json.dump(all_data_list,fp=fp)