+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2019-08(62)

2019-09(95)

2019-10(16)

2019-11(4)

2019-12(21)

爬取药品监督情况数据

发布于2021-01-15 21:04     阅读(960)     评论(0)     点赞(15)     收藏(1)


0

1

2

3

4

5

6

7

首先打开国家药品监督局的相应网址
国家药品监督局的相应网址
国家药品监督的相应页面找到某一家企业点击相应的许可证编号那一个栏目,查看相应的许可证情况
相应的许可证情况上面对应的内容为我们需要爬取的对应的数据
不确定对上述的网页进行访问的时候,我们能够得到对应的企业名称,许可证编号,发证机关等相应的数据,
这时候我们可以尝试着发一次请求,看看能否得到页面中对应的相应的数据

import  requests
import  json
url = 'http://scxk.nmpa.gov.cn:81/xk/'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'
}
page_text = requests.get(url=url,headers=headers).text
with  open('./huazhuangpin.html','w',encoding='utf-8') as fp:
    fp.write(page_text)

打开之后发现通过requests爬取到的页面之中并没有对应的企业名称等内容,
爬取到的相应的页面说明这些数据并不是通过url获取到的,而是通过别的方式获取到的,很有可能通过阿贾克斯请求到的。
接下来使用相应的抓包工具查看相应的数据
抓包工具抓取的相应的数据首先我们查看第一个xk/的对应的内容
xk/对应的内容可以看出xk/返回的正好是对应相应的源代码的数据,也就是我们之前访问对应的url返回的相应的数据。
复制相应的公司,在源代码之中进行相应的搜索
源代码之中搜索相应的公司可以发现对应公司的内容在源代码之中并没有能够相应的搜索到,意味着通过这个url请求到的数据包没有搜索到相应的企业信息,爬取的数据为动态加载出来的。
如果在整个界面使用ctrl+f,可以直接搜索整个界面不同组件相应的内容,这样就可以直接搜索到能够获取相应数据的对应组件,进而获取到相应的得到信息的方式
搜索整个界面不同组件的相应内容分析第二个相应的页面发现
分析第二个页面输入的数据对应的请求为相应的post请求,需要传入的数据为相应的id的数据,所以只需要从第一个页面提取到的数据之中提取出相应的id数值即可
完整的代码如下

import  requests
import  json
url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'
}
param = {
    'method':'getXkzsList'
}
data = {
    'on':'true',
    'page':'1',
    'pageSize':'15',
    'productName':'',
    'conditionType':'1',
    'applyname':'',
    'applysn':'',
}
response = requests.post(url=url,params=param,data=data,headers=headers)
page_text = response.json()
#现在page_text为得到的一个对应的json文件
#获取第一个界面相应的json数据,并得到json之中相应的list属性,因为
#list属性之中存放着相应的id的对应的内容
lists = page_text['list']
print('lists = ')
print(lists)
#with  open('./huazhuangpin.json','w',encoding='utf-8') as fp:
#    fp.write(str(page_text))
for  i  in  range(len(lists)):
    currentid = lists[i]['ID']
    print(currentid)
    url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do'
    param = {
        'method':'getXkzsById'
    }
    data = {
        'id':currentid
    }
    response = requests.post(url=url,params=param,data=data,headers=headers)
    print(response.json())
#获取每一个list之中对应id内容之后,对于第二个界面使用post获取相应的json数据

原文链接:https://blog.csdn.net/znevegiveup1/article/details/112606531

0

1

2

3

4

5



所属网站分类: 技术文章 > 博客

作者:大魔王

链接: https://www.pythonheidong.com/blog/article/771886/b920c0ee36a4c505986d/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

15 0
收藏该文
已收藏

评论内容:(最多支持255个字符)