所谓掌握了requests库就等于掌握了爬虫的半壁江山
所以本例选用requests库
- 之所以拿“国药监”网站来进行学习是因为,我们要获取的数据均是post请求且采取Ajax的方式在页面间传递,还在于我们要解析的数据需要两次请求,所以这就很考研对问的深究能力,综合性一般
- 据分析可以得出,我们在第一次请求的时候要拿的是,公司数据对应的id
- 第二次我们根据id去请求相应的数据
- 需要注意的是,我们所得到的是json类型
- 在本例的最后,可以对已经获取的数据进行分析,得到自己想要的数据
- 因本例的学习性质,所以不再将数据进行分析
#!/usr/bin/env python
# encoding: utf-8
"""
@file: 国家药监局化妆品公司许可信息.py
@time: 2020/2/23 21:58
"""
import requests
def post_GY():
# 批量获取企业id
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'
}
id_list = [] # 暂存企业id
word = int(input('请输入想要爬取的页数:'))
for page in range(1, word + 1):
page = str(page)
data = {
'on': 'true',
'page': page,
'pageSize': '15',
'productName': '',
'conditionType': '1',
'applyname': '',
'applysn': ''
}
json_ids = requests.post(url=url, data=data, headers=headers).json()
for dic in json_ids['list']:
id_list.append(dic['ID'])
# 获取企业详情数据
post_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
for id in id_list:
dat_id = {
'id': id
}
detail_json = requests.post(url=post_url, data=data_id, headers=headers).json()
print(detail_json)
print('解析完成!')
if __name__ == '__main__':
post_GY()
未经允许不得擅用