接着昨天的问题,如果把所有的假定蛋白的信息全都找出来并把所有的结构域信息提取出来该怎么弄呢?
方案:
1,从基因组数据库中找出所有的基因序列以及标注信息
2,提取所有假定蛋白以及序列号
3,把所有假定蛋白的结构域信息写入excel
前两步筛选后发现大约有7000多个基因组假定蛋白,用爬虫的话NCBI网又很慢,就算一个5s,5*7500/3600 = 10h,太慢了,再加上网络不稳定,可能一天搞不定。多线程又不会,
只好写一个程序作为模块,然后一次多运行几个程序,每次取500个,每次开6个程序,发现10/6 = 1.5h 多一点就跑完了,机智。
主模块:
def hyp_protein(): import re seqnum = [] for line in open(r'J:pymingming10.23magnaporthe.txt','r'):#打开基因组数据文件 if 'Uncharacterized protein' in line and 'MGG' in line:#找出假定蛋白序列 eachnum = re.search(r'MGG_d{5}',line).group(0)#找出假定蛋白序列号 seqnum.append(eachnum)#把序列号追加到列表 return seqnum#返回列表 def excel(filename,start, end):#保存文件名,起始和终止 import openpyxl from bs4 import BeautifulSoup import requests head = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'} url = r'https://www.ncbi.nlm.nih.gov/gene/?term=' wb = openpyxl.Workbook() ws = wb.active ws['A1'],ws['B1'],ws['C1'],ws['D1'] = '假定蛋白信息','结构域1','结构域2','结构域3' ws.freeze_panes = 'A2' i =0 for num in hyp_protein()[start:end]: full_url = url + num l = [] l.append(num) i += 1#用于显示进行到多少号,以方便查找错误 try: res = requests.get(full_url,headers = head, timeout = 60)#设定最长连接不超过60秒 res.encoding = 'utf-8' soup = BeautifulSoup(res.text,'lxml') domain = soup.find_all("dd",class_='clearfix') for each in domain: l.append(each.text) print(i)#打印运行到第几个 except BaseException: pass print('fail')#如果出错则打印fail ws.append(l) wb.save(filename) if __name__ == '__main__': excel(r'1.xlsx',0, 3)
运行程序:
#1.py
from hyp_proteinlist import * excel(r'1_500.xlsx',0, 500)
*
*
*
#6.py
from hyp_proteinlist import * excel(r'2500_3000.xlsx',2500, 3000)
#一次运行6个。最后把所有excel数据合并到一个文件
大功告成。