作业(爬取药监总局)
- 需求:爬取药监总局中的企业详情数据,每一家企业详情页对应的详情数据(爬取前5页企业)
- url:http://125.35.6.84:81/xk/
-
分析:
-
企业详情数据是否为动态加载数据?
- 基于抓包工具进行局部搜索。发现为动态加载数据
-
捕获动态加载的数据
- 基于抓包工具进行全局搜索。
-
定位到的数据包提取的
-
url:
- http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById
- http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById
-
请求参数:
- id: 536878abac734332ae06dcb1a3fbd14a
- id: 950d66fbf8714fbc9e799010e483d2d5
-
-
结论:每一家企业详情数据对应的请求url和请求方式都是一样的,只有请求参数id的值不一样。
- 如果我们可以将每一家企业的id值捕获,则就可以将每一家企业详情数据进行爬取。
-
捕获企业的id
- 企业的id表示的就是唯一的一家企业。我们就猜测企业id可能会和企业名称捆绑在一起。
-
在首页中会有不同的企业名称,则我们就基于抓包工具对首页的数据包进行全局搜索(企业名称)
- url:http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList
- 方式:post
-
请求参数:
- on=true&page=1&pageSize=15&productName=&conditionType=1&applyname=&applysn=
-
import requests
#获取每一家企业的id值,去首页分析查找对应企业的id值
url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
data = {
'on': 'true',
'page': '1',
'pageSize': '15',
'productName': '',
'conditionType': '1',
'applyname': '',
'applysn': '',
}
response = requests.post(url=url,headers=headers,data=data)
all_company_list = response.json()['list']
for dic in all_company_list:
_id = dic['ID']
# print(_id)
#将id作为请求企业详情数据url的请求参数
detail_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
data = {
'id':_id
}
response = requests.post(url=detail_url,headers=headers,data=data)
company_detail_dic = response.json()
person_name = company_detail_dic['businessPerson']
addr = company_detail_dic['epsProductAddress']
print(person_name,addr)
import requests
#捕获多页数据
#获取每一家企业的id值,去首页分析查找对应企业的id值
url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
for page in range(1,6):
data = {
'on': 'true',
'page': str(page),
'pageSize': '15',
'productName': '',
'conditionType': '1',
'applyname': '',
'applysn': '',
}
response = requests.post(url=url,headers=headers,data=data)
all_company_list = response.json()['list']
for dic in all_company_list:
_id = dic['ID']
# print(_id)
#将id作为请求企业详情数据url的请求参数
detail_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
data = {
'id':_id
}
response = requests.post(url=detail_url,headers=headers,data=data)
company_detail_dic = response.json()
person_name = company_detail_dic['businessPerson']
addr = company_detail_dic['epsProductAddress']
print(person_name,addr)