爬虫练习项目--化妆品生产许可信息管理系统服务平台

1.确定url

通过抓包工具可以发现,当我们刷新整个页面时,在抓包工具中并没有找到我们要爬取的数据包,由此确定,它们是ajax动态加载出来的。

注意:XHR里面抓到的包都是用ajax动态加载出来的,它们的链接不能从它们所在的整个页面的链接中直接得到,在请求头中可以得到他们的链接

分析出ajax意味着,我们需要在抓包工具中提取URL

通过分析我们可以得出:从首页的ajax中可以得到所有公司的唯一ID值。

在每个公司的AJax包中我们可以得出每个详情页面的相同部分。

1. http://scxk.nmpa.gov.cn:81/xk/itownet/portal/dzpz.jsp?id=9be8485451d44b3a8eb659ab6d3ae9c2 #公司1
2. http://scxk.nmpa.gov.cn:81/xk/itownet/portal/dzpz.jsp?id=1a7c3b68d8404db8b7048149367eeaf0 #公司2

得出结论,我们需要获取每个公司的唯一ID,然后拼接上每个链接的相同部分就可以得到每个公司的具体详情信息。

import requests
import json
# 思路:通过翻页的方式获取每一页所有公司的所有id,然后把这些id作为requests的参数和每一个固定的页面链接进行链接
# 易错点:id和固定链接之间不是简单的url的拼凑,而是id是请求的参数,是通过requests拼接到一起的。
id_list = []  # 获取每个企业的id
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'])
# ****************************************************************
# 从这里开始整个程序分为两部分,上面是获取所有的id,下面是对所有的id信息进行请求,然后是保存。
all_data =[] #这个列表用来存放最终的所有公司的具体信息
post_url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById'
for  id in id_list:  #把id封装到字典当作作为参数以备调用
    data2 = {
             #遍历所有的id
    'id':id
    }
    result = requests.post(url=post_url,headers=request_header,data=data2).json()
    all_data.append(result) #通过append方法把所有的请求结果上传到all_data[]中
    print(result) #直接输出请求返回的结果

file = open('./huanzhuanpin.json','w',encoding='utf-8')
json.dump(all_data,fp=file,ensure_ascii=False)

你可能感兴趣的:(python,爬虫)