问题

有两种关键字,需要在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 - 爬虫相关推荐

  1. elasticsearch 建立索引、增删改查 及简单查询和组合查询的学习笔记

    创建一个索引(数据库) PUT lagou # 索引名称 {"settings": {"index":{"number_of_shards" ...

  2. 13.组合查询--SQL

    利用UNION操作符将多条SELECT语句组合成一个结果集. 主要有两种情况需要使用组合查询: 在一个查询中从不同的表返回结构数据: 对一个表执行多个查询,按一个查询返回数据. UNION规则 UNI ...

  3. SQL学习之组合查询(UNION)

    1.大多数的SQL查询只包含从一个或多个表中返回数据的单条SELECT语句,但是,SQL也允许执行多个查询(多条SELECT语句),并将结果作为一个查询结果集返回.这些组合查询通常称为并或复合查询. ...

  4. 数据库9:联结表 高级联结 组合查询 全文本搜索

    第十五章联结表 Sql最强大的功能之一就是能在数据检索查询的执行中联结(join)表.联结是利用sql的select能执行的最重要的操作,能很好的理解联结及其语法是学习sql的一个极为重要的组成部分. ...

  5. 连表查询使用in_SQL 组合查询

    SQL允许执行多个查询(多条SELECT语句),并将结果作为一个查询结果返回. 使用UNION操作符,可以给出多条SELECT语句,将它们的结果组合成一个结果集. 1.使用UNION 给出每条SELE ...

  6. 初识Mysql(part19)--我需要知道的3条Mysql语句之组合查询

    学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 要点:UNION.UNION ALL 此Blog会用到下面2个表. temp_product2: # id, ...

  7. redis zset转set 反序列化失败_Redis只往zset有序集合添加不存在的数据:关键字索引查询构建+源码分析...

    Redis的有序集合Sorted Set(zset),可以很方便地用来构建关键字索引表,可以很方便地实现支持超大规模并发的关键字组合条件查询. 比如有套博客系统,博客文章存放在 hash 类型 art ...

  8. 树控件,多条件组合查询与混合数据源

    //实现多条件查询 //...连接数据库的代码 SqlDataAdapter sda = new SqlDataAdapter(sql,con); DataTable dt = new DataTab ...

  9. mysql sql组合_详解mysql 组合查询

    使用UNION 多数SQL查询都只包含一个或多个表中返回数据的单条SELECT语句.MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回.这些组合查询通常称为并(uni ...

最新文章

  1. 聊天机器人落地及进阶实战 | 公开课速记
  2. php unserialize 实例,PHP ArrayIterator unserialize()用法及代码示例
  3. axios post,get,put
  4. Problem E: 深入浅出学算法019-求n的阶乘
  5. 公式推导以及代码书写 11-26
  6. 洛谷P1306 斐波那契公约数
  7. 超市管理系统数据库设计
  8. 随机抽样C语言,R语言中实现简单随机抽样
  9. item_get - 根据ID取聚美优品商品详情
  10. 使用Navicat 设定 sql 触发器
  11. 阿里云服务器安装图形化界面(CentOS)
  12. 计算机应用中dss是,在计算机应用中,英文缩写“DSS”表示( )。
  13. 河南省网络安全高校战队联盟CTF训练营- misc04-音频隐写
  14. Gaze vector介绍
  15. 汽车VIN码识别功能实现资料,轻松实现VIN码识别
  16. Thread--线程让步yield
  17. 什么是“Ground truth”
  18. 关于青春的电影有哪些
  19. Zemax光学设计(十一) —— 扫描系统设计
  20. 2018智能社vue.js精讲视频教程

热门文章

  1. 简析PPC的Device Tree机制
  2. php 获取当天是星期几,php获取时间是星期几代码
  3. MySQL数据库服务的简单开启和关闭
  4. RPC or noRPC,这是个问题
  5. Python爬取张家界风景美图
  6. 全国计算机设计大赛音乐组作品,我校5部作品“中国大学生计算机设计大赛”获奖...
  7. 一图帮你了解什么是信息与计算科学专业
  8. 一文搞懂本地和远程分支代码回退git reset
  9. java并发编程学习三——wait/notify与park/unpark
  10. OpenCV笔记整理【直方图和掩模】