如何通过爬虫批量获得具有关键字的NCBI蛋白质序列

        以关键字“Lysin”为例,https://www.ncbi.nlm.nih.gov/protein/?term=lysin,我们打开网址发现关于Lysin的蛋白质序列一共有13708页,每页有20条蛋白信息,通过点击FASTA,我们找到了对应蛋白的氨基酸序列,通过尝试不同序列的FASTA,我们发现其url的后缀为其蛋白的Accession号,因此我们只要得到蛋白的Accession号,我们就可以通过网址链接获取蛋白质的氨基酸序列,第一页20条蛋白的Accession号我们可以通过网址链接加循环获取语句获得,而第二页及以后我们发现找不到对应网页链接了,我们无法通过网页链接获取对应页的内容,这个时候就要使用find_element_by_id/name/class_name/link_text/tag_name/xpath/css_selector('target')来找到目标并对其进行下一步操作,如点击.click()进行下一页,或者获取目标下的文本.text,如果一个页面中含有多个相同的target,如果只获取第一个则使用element,获取全部则使用element的复数形式elements。

1.获取多个关键字的前7页蛋白Accession

# -*- coding:UTF-8 -*-  
python                                            
import requests   
import time
import random                                                
from bs4 import BeautifulSoup
from selenium import webdriver
browser = webdriver.Firefox()
keywords = ['Lysin','peptidoglycan' + '+' + 'hydrolase','amidase']
for kwd in keywords:
  browser.get('https://www.ncbi.nlm.nih.gov/protein/?term=' + kwd)
  m = browser.find_elements_by_tag_name('dd')
  m = m[0:40]
  a_total = []
  for each in m:
    a = each.text
    a_total.append(a)
  browser.find_element_by_xpath('//*[@id="EntrezSystem2.PEntrez.Protein.Sequence_ResultsPanel.Entrez_Pager.Page"]').click()
  m = browser.find_elements_by_tag_name('dd')
  m = m[0:40]
  b_total = []
  for each in m:
    a = each.text
    b_total.append(a)
  b = 0
  c_total = []
  for b in range(5):
    b += 1
    browser.find_element_by_css_selector('div.pagination:nth-child(2) > a:nth-child(4)').click()
    time.sleep(random.randint(1,10))
    m = browser.find_elements_by_tag_name('dd')
    m = m[0:40]
    time.sleep(random.randint(1,10))
    c_total = []
    for each in m:
      a = each.text
      c_total.append(a)
  d_total = a_total + b_total + c_total
  f = open("NCBI_protein_ID_GI.txt", "a+")
  for each in d_total:
    f.write(each + "\n")
  f.close()


b = []
i = 0
f = open("NCBI_protein_ID_GI.txt","r")
for line in f.readlines():
  i += 1
  if (i % 2 != 0):
    b.append(line)

 
f.close()
print(b)

2.根据蛋白Accession号,我们获得所有关键词的氨基酸序列

         在以上代码基础上,我们继续输入如下代码:

seq = []
for i in b:
  url = 'https://www.ncbi.nlm.nih.gov/protein/' + i.replace('\n','') + '?report=fasta'
  time.sleep(random.randint(1,10))
  browser.get(url)
  time.sleep(random.randint(1,10))
  m = browser.find_elements_by_tag_name('pre')
  k = m[0].text
  f = open("NCBI_protein_sequence","a+")
  f.write(k + '\n')
  seq.append(k)


f.close()
print(seq)

我们发现每次爬虫,界面都会按照代码打开新的页面,这就使得代码运行的速度大大的减慢,我们可以添加不加载浏览器的指令:

# -*- coding:UTF-8 -*-  
python
import selenium
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver import FirefoxOptions
option = FirefoxOptions()
option.add_argument('--headless')
browser = webdriver.Firefox(options = option)

将以上代码可以合并到同一个文本文件中去掉第二行代码‘python’,修改后缀为xxx.py,告诉系统这是一个python文件,在ubuntu环境下添加可执行权限并运行。

chmod +x ./NCBI_protein_ID_download.py
python NCBI_protein_ID_download.py

喜欢的点击下方链接,可以加个微信公众号关注,不定时会推送一些学习所得网络爬虫进阶版:如何批量获得具有关键字的NCBI蛋白质序列

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值