1.确定url
通过抓包工具可以发现,当我们刷新整个页面时,在抓包工具中并没有找到我们要爬取的数据包,由此确定,它们是ajax动态加载出来的。
注意:XHR里面抓到的包都是用ajax动态加载出来的,它们的链接不能从它们所在的整个页面的链接中直接得到,在请求头中可以得到他们的链接
分析出ajax意味着,我们需要在抓包工具中提取URL
通过分析我们可以得出:从首页的ajax中可以得到所有公司的唯一ID值。
在每个公司的AJax包中我们可以得出每个详情页面的相同部分。
1. http://scxk.nmpa.gov.cn:81/xk/itownet/portal/dzpz.jsp?id=9be8485451d44b3a8eb659ab6d3ae9c2
2. http://scxk.nmpa.gov.cn:81/xk/itownet/portal/dzpz.jsp?id=1a7c3b68d8404db8b7048149367eeaf0
得出结论,我们需要获取每个公司的唯一ID,然后拼接上每个链接的相同部分就可以得到每个公司的具体详情信息。
import requests
import json
id_list = []
request_header ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74'
}
url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList'
for page in range(1,20):
page = str(page)
data = {
'on': 'true',
'page': page,
'pageSize': '15',
'productName': '',
'conditionType': '1',
'applyname': '',
'applysn': ''
}
response = requests.post(url=url,headers=request_header,data=data).json()
for dic in response['list']:
id_list.append(dic['ID'])
all_data =[]
post_url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById'
for id in id_list:
data2 = {
'id':id
}
result = requests.post(url=post_url,headers=request_header,data=data2).json()
all_data.append(result)
print(result)
file = open('./huanzhuanpin.json','w',encoding='utf-8')
json.dump(all_data,fp=file,ensure_ascii=False)