代码

# 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数据库下载的更多相关文章

  1. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  2. Golang - 爬虫案例实践

    目录 Golang - 爬虫案例实践 1. 爬虫步骤 2. 正则表达式 3. 并发爬取美图 Golang - 爬虫案例实践 1. 爬虫步骤 明确目标(确定在哪个网址搜索) 爬(爬下数据) 取(去掉没用 ...

  3. Python 简单爬虫案例

    Python 简单爬虫案例 import requests url = "https://www.sogou.com/web" # 封装参数 wd = input('enter a ...

  4. Java爬虫爬取网站电影下载链接

    之前有看过一段时间爬虫,了解了爬虫的原理,以及一些实现的方法,本项目完成于半年前,一直放在那里,现在和大家分享出来. 网络爬虫简单的原理就是把程序想象成为一个小虫子,一旦进去了一个大门,这个小虫子就像 ...

  5. MySQL数据库下载安装和DataGrip的下载安装和破解

    一: 数据库下载 地址:官网https://dev.mysql.com/downloads/file/?id=482771;如果参数id失效,就选择之前的版本,5.7就可以,太新的没人用,老的很稳定. ...

  6. ASP.NET中防止Access数据库下载

    如何防止Access数据库下载是一个很老的话题了,网上的讨论也比较多.这里我们给出几种在ASP.NET下防止Access数据库被下载的方法. 我们这里假设Access数据库名字为 test.mdb. ...

  7. Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片

    Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片 其实没太大用,就是方便一些,因为现在各个平台之间的图片都不能共享,比如说在 CSDN 不能用简书的图片, ...

  8. 【Python爬虫案例学习】下载某图片网站的所有图集

    前言 其实很简短就是利用爬虫的第三方库Requests与BeautifulSoup. 其实就几行代码,但希望没有开发基础的人也能一下子看明白,所以大神请绕行. 基本环境配置 python 版本:2.7 ...

  9. java爬虫案例学习

    最近几天很无聊,学习了一下java的爬虫,写一些自己在做这个案例的过程中遇到的问题和一些体会1.学习目标         练习爬取京东的数据,图片+价格+标题等等 2.学习过程 1·开发工具      ...

随机推荐

  1. Python爬虫之正则表达式(2)

    # 最常规的匹配 import re content = 'Hello 123 4567 World_This is a Regex Demo' print(len(content)) result ...

  2. Linux上修改主机名

    依次执行以下命令 hostnamectl set-hostname 你想设置的名字 hostname 你想设置的名字(和上面的名字保持一致) exit 然后重新连接就行了

  3. 线程池工厂方法newScheduledThreadPool(),计划任务

    package com.thread.test.ThreadPool; import java.util.concurrent.Executors; import java.util.concurre ...

  4. WPFの命中测试

    概述:  WPF中的Canvas是常用的一个绘图控件,可以方便地在Canvas中添加我们需要处理的各种元素如:图片.文字等.但Canvas中元素增加到一定数量,并且有重合的时候,我们如何通过在Canv ...

  5. 回顾servlet生命周期(代码测试),读取初始化参数

    servlet生命周期 为简洁,本例使用注解方式来测试,代码部分很简单,只需要新建一个serlet,继承自HttpServlet,重写init,doGet,doPost,destory方法即可,使用注 ...

  6. js字符串转时间

    function StrToDateTime(value) { if (value) { return (new Date(Date.parse(value.replace(/-/g, "/ ...

  7. 在物理内存中观察CLR托管内存及GC行为

    虽然看了一些书,还网络上的一些博文,不过对CLR托管内存细节依然比较模糊.而且因为工作原因总会有很多质疑,想要亲眼看到内存里二进制数据的变化. 所以借助winhex直接查看内存以证实书上的描述或更进一 ...

  8. Scratch不仅适合小朋友,程序员和大学老师都应该广泛使用!!!

    去年接触到了Scratch这个编程工具,它是一种简易图形化编程工具,这个软件的开发团队来自于麻省理工大学称为“终身幼儿园团队”(Lifelong Kindergarten Group). 网址http ...

  9. 什么是面向切面编程AOP

    一丶前言 看过一些描述关于AOP切面编程的文章,写的太概念化让人很难理解,下面是我自己的理解,希望能帮到新人,如有错误欢迎指正. 二丶AOP是什么,它的应用场景是什么? AOP也跟IOC,OOP这些思 ...

  10. PS制作黑暗墙面上的漂亮霓虹文字

    一.用ps软件打开砖墙背景素材. 二.复制一层,混合模式改为“正片叠底”,不透明度50%. 三.新建色相/饱和度调整图层,设置如下.打造夜间的气氛. 四.新建一个空白图层,设置前景色黑色.背景色白色, ...