使用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使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时