使用selenium采集国家药品监督管理局的GCP药物信息

本文主要是介绍使用selenium采集国家药品监督管理局的GCP药物信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

由于业务需求,需要采集国家药品监督管理局上面的药物信息备案。拿到手这个任务,简单看了一下网页结构,不是小keys。直接到起手来撸代码,说时迟那时快,一分钟后运行了一下,直接给我返回了一串加密的js代码。???这是啥玩意呦,本以为只是一个简单的小任务,原来还有点文章在里面。

别的不说,开始埋头苦干,花了大概2个小时的时间,js断点调试,修改js源代码,还是没有找到加密的方式。不得不说,中国开头的网站的反扒还是有点东西的。老大又急着要数据,我能也是秉持着人道主义原则,先放弃使用requests,直接使用selenium来采集了。代码没什么技术含量,就是简单的一些操作应用,看看点个赞就好。

正文

下面直接贴代码,采用selenium,数据保存到mysql,这边只贴下GCP信息的代码块,其他的品种类似,可以自己尝试着写写。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import pymysql
import time
import re
from lxml import etree
from bs4 import BeautifulSoupchrome_options = Options()
# chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('disable-infobars')
driver = webdriver.Chrome('D:\\chromedriver_win32\\chromedriver.exe', chrome_options=chrome_options)
conn = pymysql.connect(host='xxx', user='xxx', passwd='xxx', db='xxx',charset='utf8')
cur = conn.cursor()
headers = {
"Connection": "keep-alive",
"Host": "app1.sfda.gov.cn",
"Pragma": "no-cache",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
}
def get_all_url():base_url = "http://app1.sfda.gov.cn/datasearchcnda/face3/search.jsp?"for i in range(1, 104):data = "tableId=19&State=1&bcId=152904843704682622352673850395&State=1&curstart={0}&State=1&tableName=TABLE19&State=1&viewtitleName=COLUMN121&State=1&tableView=%25E8%258D%25AF%25E7%2589%25A9%25E4%25B8%25B4%25E5%25BA%258A%25E8%25AF%2595%25E9%25AA%258C%25E6%259C%25BA%25E6%259E%2584%25E5%2590%258D%25E5%258D%2595&State=1&cid=0&State=1&ytableId=0&State=1&searchType=search&State=1".format(str(i))url = base_url + datatime.sleep(2.5)driver.get(url)response = driver.page_sourceif "Forbidden" in response or "请检查您的互联网连接是否正常" in response:driver.refresh()response = driver.page_sourceprint("正在采集第     %s页" % i)html = etree.HTML(response)trs = html.xpath("/html/body/table[2]//tr")for tr in trs:href = "".join(tr.xpath(".//a/@href"))if href:detail_url = "http://app1.sfda.gov.cn/datasearchcnda/face3/" + "".join(re.findall("javascript.*?'(.*?)'", href, re.S))n = cur.execute("select collect_url from original_065_basetable where collect_url=%s",detail_url)if n == 0:sql = "insert into `original_065_basetable`(collect_url,status) values (%s,%s)"params = (detail_url,"1")cur.execute(sql,params)def get_all_data():cur.execute("SELECT `collect_url` FROM `original_065_basetable` where status = 1")for row in cur.fetchall():url = row[0]time.sleep(0.5)driver.get(url)response = driver.page_sourceif "Forbidden" in response or "请检查您的互联网连接是否正常" in response:driver.refresh()response = driver.page_sourcesoup = BeautifulSoup(response, "html.parser")proj_id = url.split("&Id=")[1]try:a1 = soup.find(text="证书编号").findNext("td").text.strip()  # 证书编号except:driver.refresh()response = driver.page_sourcesoup = BeautifulSoup(response, "html.parser")proj_id = url.split("&Id=")[1]a1 = soup.find(text="证书编号").findNext("td").text.strip()  # 证书编号a2 = soup.find(text="医疗机构名称").findNext("td").text.strip()  # 医疗机构名称print(a2)a3 = soup.find(text="地址").findNext("td").text.strip()  # 地址a4 = soup.find(text="省市").findNext("td").text.strip()  # 省市a5 = soup.find(text="认证日期").findNext("td").text.strip()  # 认证日期a6 = soup.find(text="有效期截止日").findNext("td").text.strip()  # 有效期截止日a7 = soup.find(text="认定专业").findNext("td").text.strip()  # 认定专业sql = 'insert into original_007_baseinfo(proj_url_id,collect_time,collect_url,k007_000001,k007_000002,k007_000003,k007_000004,k007_000005,k007_000006,k007_000007,regname,regtime,status)values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'params = (proj_id, time.strftime('%Y%m%d'), url, a1, a2, a3, a4, a5, a6, a7, 'zuohaojie', time.strftime('%Y%m%d'), '1')cur.execute(sql, params)cur.execute("update `original_065_basetable` set status = 0 where collect_url=%s",url)cur.close()if __name__ == '__main__':# get_all_url()  ### 采集全部网址,get_all_data()  # 录入原始库

觉得有用的献出你们的小爱心吧!!!同时欢迎访问个人博客主页… …

这篇关于使用selenium采集国家药品监督管理局的GCP药物信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/400482

相关文章

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用