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 > dl



import time
from scrapy import Selector

import requests
import pandas as pd

def 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.text
    selector = 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].values
    disease = 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 = 3
    queryAndSave(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.6134023666382


    df = 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)


### 回答1: NCBI-BLAST-2.13.0-win64是一种基于谷氨酰胺脲和其他生物信息学技术的序列比对软件包。这个软件被广泛用于分析DNA,RNA和蛋白质序列,使得比对过程能够更加快速精确。该软件中包含了多个工具,如核酸和蛋白质序列比对,重排序,序列相似性搜索,基于模板的序列比对等。 NCBI-BLAST-2.13.0-win64具有许多特性和功能,例如可以查询各种序列数据库,对于不同的序列类型具有不同的比对策略,可以进行加速计算和多进程处理,支持多种输出格式,可以进行本地安装等等。此外,其还具有自定义参数和调整比对参数等高级设置。 该软件包已经成为生物医学研究中的重要工具之一,用于生物数据处理、统计学分析以及建立模型和预测。NCBI-BLAST-2.13.0-win64能够帮助研究人员更好的理解生物序列之间的相似性,从而推断其功能和进化关系。这对于进行生物大数据分析和快速挖掘生物信息,为生物医学研究提供更多帮助的重要性无法忽视。 ### 回答2: NCBI-BLAST-2.13.0 -win64 是一款开源软件,是 National Center for Biotechnology Information (NCBI) 提供的序列比对工具之一。该软件适用于 Windows 64 位操作系统,可以在命令行下运行。其中,BLAST 是 Basic Local Alignment Search Tool 的缩写,指的是基本局部比对搜索工具,常用于在大量的生物序列中寻找相似的序列。 NCBI-BLAST-2.13.0 -win64 支持多种输入文件格式,包括 FASTA、GenBank、EMBL 等。它可以对两种或多种序列之间进行 BLAST 分析,查找它们之间的相似性和差异性。与其他序列比对软件相比,NCBI-BLAST-2.13.0 -win64 具有高速度、高准确度、灵活性等特点。此外,它也可以进行多种参数的自定义设置,以适应不同的比对需求。 总之,NCBI-BLAST-2.13.0 -win64 是一款强大的生物信息学工具,可以帮助研究者在大量的生物序列数据中寻找相似的序列,从而推测它们的结构、功能、演化关系等重要信息,为生物学研究提供有力支持。 ### 回答3: ncbi-blast-2.13.0 -win64是一个基于NCBI平台开发的Blast程序的版本号,在Windows操作系统下可用。Blast是一种用于生物信息学研究的算法,用于比对和分析DNA、RNA和蛋白质序列。NCBI-Blast是由美国国家医学图书馆(National Library of Medicine)所提供的一个全球著名的互联网爬虫、文献检索和生物信息资源的网站。NCBI-Blast提供了多个版本,用于不同的平台和操作系统。NCBI-Blast-2.13.0 -win64是专门为Windows 64位操作系统设计开发的版本。它具有以下特点:可以快速比对大规模的DNA、RNA和蛋白质序列;提供多种比对算法,可以根据需要选择适合的算法;支持本地计算机和远程服务器,方便用户按照不同的需求进行使用。总之,NCBI-Blast-2.13.0 -win64是专门为方便Windows 64位用户利用Blast算法比对和分析生物序列而开发的一个工具,可以极大地提高生命科学研究的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值