爬虫案例之Pubmed数据库下载
代码
# encoding=utf-8
import os, time, re
import urllib.request
import urllib.parse
import ssl ssl._create_default_https_context = ssl._create_unverified_context
retmax = 500
FAILURE = 0
SUCCESS = 1
startNum = 1 BASE = 'NARA'
FILES= ['Losartan','Valsartan','Irbesartan','Eprosartan','Candesartan','Telmisartan','Olmesartan'] # BASE = 'Triptans'
# FILES = ['Sumatriptan','Zolmitriptan',
# 'Naratriptan','Rizatriptan','Almotriptan',
# 'Frovatriptan','Eletriptan'] if not os.path.exists(BASE):
os.mkdir(BASE) def lastline(fd):
lastNum = 0
print(fd)
if not os.path.isfile(fd):
f_check = open(fd, 'w')
f_check.close()
f = open(fd, 'r')
lines = f.readlines()
f.close()
if lines:
lastNum = int(lines[-1].strip())
return lastNum def Download(drug, sleep_time, query_key, webenv, endNum):
lastNum = lastline('{}/{}/checkpoint.txt'.format(BASE,drug))
if lastNum == 0:
start = startNum - 1
else:
start = lastNum + retmax
# print(lastNum)
f_append = open('{}/{}/checkpoint.txt'.format(BASE, drug), 'a')
f_error = open('{}/{}/error.txt'.format(BASE, drug), 'a')
try:
for retstart in range(start, endNum, retmax):
time.sleep(sleep_time)
print('\tdownloading: %d - %d' % (retstart + 1, retstart + retmax))
urllib.request.urlretrieve('https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?'
'db=pubmed&query_key=%s&WebEnv=%s&retstart=%s&retmax=%s&retmode=xml' % (
query_key, webenv, retstart, retmax),
'%s/%s/%d-%d.xml' % (BASE, drug, retstart + 1, retstart + retmax)) f_append.write('%d\n' % (retstart))
f_append.flush()
except Exception as ex:
print(ex)
# print('\t\tbad connection!')
raise Exception()
return FAILURE
finally:
f_append.close()
f_error.close() print('Downloading is done........................')
return SUCCESS def Download_auto(fun, drug, query_key, webenv, endNum, sleep_time=5):
while True:
try:
value = fun(drug, sleep_time, query_key, webenv, endNum)
if value == SUCCESS:
break
except Exception as e:
sleep_time += 5
print('prolong sleep time:', sleep_time) def main(drug):
"""主函数"""
if not os.path.exists('{}/{}'.format(BASE,drug)):
os.mkdir('{}/{}'.format(BASE,drug))
query = '%s[TIAB]+OR+%s[MH]' % (drug, drug)
url = 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term={}&usehistory=y'.format(query)
history = urllib.request.urlopen(url)
content = history.read().decode()
pattern = re.compile('<Count>(\d+)</Count>.*<QueryKey>(\d+)</QueryKey>.*<WebEnv>(\S+)</WebEnv>')
s = pattern.search(content)
count = s.group(1)
query_key = s.group(2)
webenv = s.group(3)
print('total counts: %s' % count)
endNum = int(count)
print(endNum)
Download_auto(Download,drug, query_key, webenv, endNum) if __name__ == '__main__':
start = time.time()
list(map(main, FILES))
print(time.time() - start)
爬虫案例之Pubmed数据库下载的更多相关文章
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- Golang - 爬虫案例实践
目录 Golang - 爬虫案例实践 1. 爬虫步骤 2. 正则表达式 3. 并发爬取美图 Golang - 爬虫案例实践 1. 爬虫步骤 明确目标(确定在哪个网址搜索) 爬(爬下数据) 取(去掉没用 ...
- Python 简单爬虫案例
Python 简单爬虫案例 import requests url = "https://www.sogou.com/web" # 封装参数 wd = input('enter a ...
- Java爬虫爬取网站电影下载链接
之前有看过一段时间爬虫,了解了爬虫的原理,以及一些实现的方法,本项目完成于半年前,一直放在那里,现在和大家分享出来. 网络爬虫简单的原理就是把程序想象成为一个小虫子,一旦进去了一个大门,这个小虫子就像 ...
- MySQL数据库下载安装和DataGrip的下载安装和破解
一: 数据库下载 地址:官网https://dev.mysql.com/downloads/file/?id=482771;如果参数id失效,就选择之前的版本,5.7就可以,太新的没人用,老的很稳定. ...
- ASP.NET中防止Access数据库下载
如何防止Access数据库下载是一个很老的话题了,网上的讨论也比较多.这里我们给出几种在ASP.NET下防止Access数据库被下载的方法. 我们这里假设Access数据库名字为 test.mdb. ...
- Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片
Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片 其实没太大用,就是方便一些,因为现在各个平台之间的图片都不能共享,比如说在 CSDN 不能用简书的图片, ...
- 【Python爬虫案例学习】下载某图片网站的所有图集
前言 其实很简短就是利用爬虫的第三方库Requests与BeautifulSoup. 其实就几行代码,但希望没有开发基础的人也能一下子看明白,所以大神请绕行. 基本环境配置 python 版本:2.7 ...
- java爬虫案例学习
最近几天很无聊,学习了一下java的爬虫,写一些自己在做这个案例的过程中遇到的问题和一些体会1.学习目标 练习爬取京东的数据,图片+价格+标题等等 2.学习过程 1·开发工具 ...
随机推荐
- laravel项目使用appnode部署linux系统到阿里云服务器流程记录(待补充)
使用 SSH 连接工具,如 PuTTY.XShell.SecureCRT 等,连接 Linux 服务器后(阿里云服务器命令行内直接输入appnode安装命令,版本:mysql选5.7.php选7.2) ...
- 两种动态SQL
参考:http://www.cnblogs.com/wanyuan8/archive/2011/11/09/2243483.htmlhttp://www.cnblogs.com/xbf321/arch ...
- 使用mybatis报错【Result Maps collection already contains value for ...BaseResultMap】的解决方法
Result Maps collection already contains value for ...BaseResultMap ...... 这个问题,相信大家在使用mybatis的重新生成 d ...
- 【PAT】B1018 锤子剪刀布
抄的柳婼小姐姐的,感觉三个数求最大那里用的真棒 #include <stdio.h> int main() { int N; scanf("%d", &N); ...
- PHP程序污点型漏洞静态检测方法
这篇文献,作者针对基于PHP语言开发的web应用程序产生的污点型漏洞,提出了一种静态代码分析检测的方法. 先解释一下什么叫污点型漏洞,由于对于用户的输入没有进行有效的过滤,使其进入敏感函数 ...
- SQLServer之修改CHECK约束
使用SSMS数据库管理工具修改CHECK约束 1.打开数据库,选择数据表->右键点击->选择设计(或者展开约束,选择约束,右键点击,选择修改,后面步骤相同). 2.选择要修改的数据列-&g ...
- Mac下的效率工具autojump
(转) IDE 用起来总是得不到满足,Mac 适合搞开发,我也十分喜欢 Mac 系统,当然可以说喜欢 Unix/Linux 系统.今天在 .zshrc 文件中添加了这么几行快捷命令: alias go ...
- SQL语句检索数据排序及过滤
阅读目录 一:排序检索数据 二:过滤数据 三:高级数据过滤 四:用通配符进行过滤 回到顶部 一:排序检索数据 1.1 排序数据 比如查询数据库中表数据的时候,我们使用如下语句: select * fr ...
- (转)lwip TCP client & FreeRTOS 打开TCP 的 保活机制 LWIP_TCP_KEEPALIVE==1
参考大神教程:http://blog.sina.com.cn/s/blog_62a85b950101aw8x.html 老衲五木 :http://blog.sina.com.cn/s/blog_6 ...
- 故障公告:docker swarm集群“群龙无首”造成部分站点无法访问
今天傍晚 17:38-18:18 左右,由于 docker swarm 集群出现 "The swarm does not have a leader" 问题,造成博问.闪存.园子. ...