python使用抓包工具Fiddler4和selenium获取国家药监局网站数据

获取药监局网站数据

药监局网站反爬比较厉害,本文介绍了用抓包工具Fiddler4和安卓模拟器先获取数据链接,然后用selenium.webdriver模拟手机访问获得最终数据。本文以抓取国产药品详情页为目标,本文仅供学习交流!!在这里插入图片描述
在这里插入图片描述

1.使用Fiddler4和安卓模拟器获取数据链接

药监局有app,所以我们可以通过Fiddler4和安卓模拟器来抓取数据链接,本文以抓取国产药品详情页为目标:
  1. 下载Fiddler4并安装,使用教程https://blog.csdn.net/God_XiangYu/article/details/105512462在这里插入图片描述

  2. 注意Fiddler4要设置通讯端口,我这设置的8888;

  3. 安装逍遥模拟器并安装药监局app,设置安卓模拟器为非root模式;

逍遥模拟器并安装药监局app

  1. 进入安卓模拟器设置里,打开网络连接,设置通讯端口和ip,ip为本机ip;在这里插入图片描述

  2. 在安卓模拟器里打开药监局app,点到国产药品,查看Fiddler4里数据信息;药品详情页

点击result为200的最新一行
在这里插入图片描述
查看数据
在这里插入图片描述
红线里get请求的连接就是药品详情页的后面的链接,完整的链接为http://mobile.nmpa.gov.cn/datasearch/QueryRecord?tableId=25&searchF=ID&searchK=109228。
tableId=25 里25 是国产药品页面的代表数字,searchK=109228 里109228是药品编号。

  1. 将得到的网站链接用谷歌浏览器打开试试,看看能得到什么。注意要用手机模式打开,图中红框点亮就是手机模式;在这里插入图片描述
    我们就直接得到数据了。

2.使用selenium.webdriver获取数据

为什么不直接requests.get,这是因为该网站用到了cookie 反爬,每次访问都会有验证,cookie还会改变,所以就用selenium.webdriver获取数据了。

  1. 具体代码如下:
from selenium import webdriver
import json


mobileEmulation = {'deviceName': 'iPhone 6/7/8'}   #设置手机环境
options = webdriver.ChromeOptions()
options.add_argument('headless')    #设置不显示页面
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option('mobileEmulation', mobileEmulation)
#executable_path 为chromedriver文件路径,chromedriver是谷歌浏览器驱动软件
driver = webdriver.Chrome(executable_path='./chromedriver.exe', options=options)

i=109228
print("爬取第%d个" % i)
url = 'http://mobile.nmpa.gov.cn/datasearch/QueryRecord?tableId=25&searchF=ID&searchK=' + str(i)
driver.get(url)
xpath_drug = "//body"
data = driver.find_elements_by_xpath(xpath_drug)

#清洗获取的数据,tag = True 是数据不为空
info = ""
tag = True
for i2 in data:
    if i2.text == "[]":
        tag = False
    else:
        info += str(i2.text)
if tag == True:
    d = info.split("},{")
    info = "},{".join(d[:-1]) + "}]"
    Data = json.loads(info)
    print(Data)
#关闭
driver.quit()
  1. 程序显示,获取的数据如下
    在这里插入图片描述
    [{‘NAME’: ‘批准文号’, ‘CONTENT’: ‘国药准字Z20020147’}, {‘NAME’: ‘产品名称’, ‘CONTENT’: ‘龟龙中风丸’}, {‘NAME’: ‘英文名称’, ‘CONTENT’: ‘’}, {‘NAME’: ‘商品名’, ‘CONTENT’: ‘’}, {‘NAME’: ‘剂型’, ‘CONTENT’: ‘丸剂(水丸)’}, {‘NAME’: ‘规格’, ‘CONTENT’: ‘每30丸重5g’}, {‘NAME’: ‘上市许可持有人’, ‘CONTENT’: ‘’}, {‘NAME’: ‘生产单位’, ‘CONTENT’: ‘沈阳红药集团股份有限公司’}, {‘NAME’: ‘生产地址’, ‘CONTENT’: ‘沈阳市大东区北大营西路2号’}, {‘NAME’: ‘产品类别’, ‘CONTENT’: ‘中药’}, {‘NAME’: ‘批准日期’, ‘CONTENT’: ‘2015-07-30’}, {‘NAME’: ‘原批准文号’, ‘CONTENT’: ‘’}, {‘NAME’: ‘药品本位码’, ‘CONTENT’: ‘86901343001160’}, {‘NAME’: ‘药品本位码备注’, ‘CONTENT’: ‘’}]

  2. 通过修改链接里searchK的值,就可以把全部的国产药品的详细信息获取下来。

3.结束

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值