ncbi 关键字组合查询bioProjectID - 爬虫
问题
有两种关键字,需要在ncbi上面进行查询,返回bioProjectID
查询完发现网站地址如下:这就是我们需要请求的页面
https://www.ncbi.nlm.nih.gov/bioproject/?term=(frontal%5BAll+Fields%5D+AND+ASD%5BAll+Fields%5D)+AND+%22org+human%22%5BFilter%5D
点击查看此时的网页
1 处是我们的筛选条件
2 处是我们需要返回的bioProjectID
请求地址是: 'https://www.ncbi.nlm.nih.gov/bioproject/?term=(%s[All Fields] AND %s[All Fields]) AND "org human"[Filter]' % ( d, b)
d b 分别是需要查询的两个关键字:frontal,ASD
返回的结果就是和这两个关键字相关的bioProjectID 条目
爬虫生成的文件:
2ASD_brainArea_bioProjectID.tsv 关键字1,关键字2,bioprojectID
文件 3bioProjectID_url.tsv
给出这个id的详情页面,方便在excel中点击跳转
爬虫源码
只需要把index文件替换为自己需要查询的关键字就行,n_k 表示第一种关键字的个数
如这个index文件: 表示前三个是一第一种关键字,n_k = 3
# Title : getBioProjectID.py
# Created by: julse@qq.com
# Created on: 2021/8/6 8:51
# des : TODO
# ((ASD) AND "Homo sapiens"[orgn:__txid9606]) AND bioproject_sra[filter] NOT bioproject_gap[filter]# (frontal[All Fields] AND ASD[All Fields]) AND "org human"[Filter]# https://www.ncbi.nlm.nih.gov/bioproject/?term=(frontal%5BAll+Fields%5D+AND+ASD%5BAll+Fields%5D)+AND+%22org+human%22%5BFilter%5D# #maincontent > div > div:nth-child(5) > div:nth-child(1) > div.rslt > div.aux > div > dl > dlimport time
from scrapy import Selectorimport requests
import pandas as pddef queryBP(URL):# 引入 requests,实现请求# URL = 'https://www.ncbi.nlm.nih.gov/bioproject/?term=(frontal%5BAll+Fields%5D+AND+ASD%5BAll+Fields%5D)+AND+%22org+human%22%5BFilter%5D'# URL = 'https://www.ncbi.nlm.nih.gov/bioproject/?term=(frontal%5BAll+Fields%5D+AND+ASD%5BAll+Fields%5D)+AND+%22org+human%22%5BFilter%5D'# 输入在浏览器的网址res = requests.get(URL)# 发送 GET 方式的请求,并把返回的结果(响应)存储在 res 变量里头# 答第二个问题,get() 方法需要输入一个网页链接body = res.textselector = Selector(text=body)# result = selector.css('#maincontent > div > div > div > div.rslt > div.aux > div > dl > dl')# 展示多行结果se = selector.css('#maincontent > div > div > div > div.rslt > div.aux > div > dl > dl > dd:nth-child(4)')idlist = se.re('\d+')if idlist==[]:# 展示单一条目se = selector.css('#maincontent > div > div:nth-child(5) > div > div.Right > span')idlist = se.re('\d+')return idlist# maincontent > div > div:nth-child(5) > div > div.Right > span
def queryAndSave(f1_in,f1,f2,n_k):''':param f1_in: query key:param f1: query info:param f2: result:return:'''# b = 'autism'# d = 'Thalamus'# # autism Primary Motor# URL = 'https://www.ncbi.nlm.nih.gov/bioproject/?term=(%s[All Fields] AND %s[All Fields]) AND "org human"[Filter] AND "org human"[Filter]' % (# d, b)# ans = queryBP(URL)df = pd.read_csv(f1_in, header=None)bpid = []keylist = df[0].valuesdisease = keylist[0:n_k]brainA = keylist[n_k:]with open(f1, 'w') as fi:fi.write('ASD\tbrainArea\tbioProjectID\n')fi.flush()for d in disease:for b in brainA:print(d, b)URL = 'https://www.ncbi.nlm.nih.gov/bioproject/?term=(%s[All Fields] AND %s[All Fields]) AND "org human"[Filter]' % (d, b)items = queryBP(URL)if len(items) == 0:fi.write('%s\t%s\t%s\n' % (d, b, 'notfound'))fi.flush()for item in queryBP(URL):fi.write('%s\t%s\t%s\n' % (d, b, item))fi.flush()bpid.append(item)df1 = pd.DataFrame(bpid).drop_duplicates()df1.to_csv(f2, header=['bioProjectID'], index=None)if __name__ == '__main__':print('start', time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))start = time.time()f1_in = 'index.txt'f1 = '3ASD_brainArea_bioProjectID.tsv'f2 = '3bioProjectID.tsv'f3 = '3bioProjectID_url.tsv'n_k = 3queryAndSave(f1_in, f1, f2,n_k)# stop 2021-08-06 09:49:30# time 915.471342086792# stop 2021-08-06 10:39:18# time 1772.6134023666382df = pd.read_csv(f2)df[1] = df.applymap(lambda x:'https://www.ncbi.nlm.nih.gov/bioproject/%s'%x)df.to_csv(f3, header=['bioProjectID','url'], index=None)print('stop', time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))print('time', time.time() - start)
ncbi 关键字组合查询bioProjectID - 爬虫相关推荐
- elasticsearch 建立索引、增删改查 及简单查询和组合查询的学习笔记
创建一个索引(数据库) PUT lagou # 索引名称 {"settings": {"index":{"number_of_shards" ...
- 13.组合查询--SQL
利用UNION操作符将多条SELECT语句组合成一个结果集. 主要有两种情况需要使用组合查询: 在一个查询中从不同的表返回结构数据: 对一个表执行多个查询,按一个查询返回数据. UNION规则 UNI ...
- SQL学习之组合查询(UNION)
1.大多数的SQL查询只包含从一个或多个表中返回数据的单条SELECT语句,但是,SQL也允许执行多个查询(多条SELECT语句),并将结果作为一个查询结果集返回.这些组合查询通常称为并或复合查询. ...
- 数据库9:联结表 高级联结 组合查询 全文本搜索
第十五章联结表 Sql最强大的功能之一就是能在数据检索查询的执行中联结(join)表.联结是利用sql的select能执行的最重要的操作,能很好的理解联结及其语法是学习sql的一个极为重要的组成部分. ...
- 连表查询使用in_SQL 组合查询
SQL允许执行多个查询(多条SELECT语句),并将结果作为一个查询结果返回. 使用UNION操作符,可以给出多条SELECT语句,将它们的结果组合成一个结果集. 1.使用UNION 给出每条SELE ...
- 初识Mysql(part19)--我需要知道的3条Mysql语句之组合查询
学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 要点:UNION.UNION ALL 此Blog会用到下面2个表. temp_product2: # id, ...
- redis zset转set 反序列化失败_Redis只往zset有序集合添加不存在的数据:关键字索引查询构建+源码分析...
Redis的有序集合Sorted Set(zset),可以很方便地用来构建关键字索引表,可以很方便地实现支持超大规模并发的关键字组合条件查询. 比如有套博客系统,博客文章存放在 hash 类型 art ...
- 树控件,多条件组合查询与混合数据源
//实现多条件查询 //...连接数据库的代码 SqlDataAdapter sda = new SqlDataAdapter(sql,con); DataTable dt = new DataTab ...
- mysql sql组合_详解mysql 组合查询
使用UNION 多数SQL查询都只包含一个或多个表中返回数据的单条SELECT语句.MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回.这些组合查询通常称为并(uni ...
最新文章
- 聊天机器人落地及进阶实战 | 公开课速记
- php unserialize 实例,PHP ArrayIterator unserialize()用法及代码示例
- axios post,get,put
- Problem E: 深入浅出学算法019-求n的阶乘
- 公式推导以及代码书写 11-26
- 洛谷P1306 斐波那契公约数
- 超市管理系统数据库设计
- 随机抽样C语言,R语言中实现简单随机抽样
- item_get - 根据ID取聚美优品商品详情
- 使用Navicat 设定 sql 触发器
- 阿里云服务器安装图形化界面(CentOS)
- 计算机应用中dss是,在计算机应用中,英文缩写“DSS”表示( )。
- 河南省网络安全高校战队联盟CTF训练营- misc04-音频隐写
- Gaze vector介绍
- 汽车VIN码识别功能实现资料,轻松实现VIN码识别
- Thread--线程让步yield
- 什么是“Ground truth”
- 关于青春的电影有哪些
- Zemax光学设计(十一) —— 扫描系统设计
- 2018智能社vue.js精讲视频教程
热门文章
- 简析PPC的Device Tree机制
- php 获取当天是星期几,php获取时间是星期几代码
- MySQL数据库服务的简单开启和关闭
- RPC or noRPC,这是个问题
- Python爬取张家界风景美图
- 全国计算机设计大赛音乐组作品,我校5部作品“中国大学生计算机设计大赛”获奖...
- 一图帮你了解什么是信息与计算科学专业
- 一文搞懂本地和远程分支代码回退git reset
- java并发编程学习三——wait/notify与park/unpark
- OpenCV笔记整理【直方图和掩模】