生物信息学-批量上传文件
1. 生物信息学中,经常会使用很多预测软件。
比如:用蛋白质结构预测的软件、用于抗原表位预测的软件等。使用这些软件的前提是:提交可被软件读取的文件,并选择适当的参数。当研究对象数量较少时,可以人工一个个进行提交,但当文件数量过大时,人工提交则变的不现实。
2. 因此本文以BEpro软件为例,该软件的主要功能为预测抗原表位,且其不支持批量提交文件。
2.1 BEpro主页
http://pepito.proteomics.ics.uci.edu/
2.2 BEpro使用方法
3. 利用python中的selenium模块进行模拟浏览器提交任务。
3.1 python的安装和使用
(略)
3.2 selenium的安装
在cmd命令行中输入 pip install selenium
3.3 selenium的使用
① 对着网页按下F12,查看网页源码
我们利用selenium中的 find_element_by_xpath() 功能完成批量提交
② 找到选择文件按钮所在行,其代码如下:
<input type="file" name="filename" size="37">
③ 找到PDB File单选按钮所在行,其代码如下:
<input type="radio" name="outputType" value="text">
④ 找到提交按钮所在行,其代码如下:
<input type="submit">
⑤在selenium中,提交数据(字符串、长文本或者文件)都是使用send_key()的命令;点击按钮则使用click()命令。
具体代码如下:
# -*- coding: utf-8 -*-
# -------------------------------------
# @Time : 2017/8/18 18:44
# @Author: 就是我啦
# @E-mail: 不告诉你
# @Name: Pepito.py
# @Software: PyCharm Community Edition
# -------------------------------------
import os.path
import sys
import time
from selenium import webdriver
def pepito_web(file_name):
# 打开浏览器(可以是火狐,也可以是Chrome,也可以是PhantomJS)
driver = webdriver.Firefox()
try:
# 获取目标网址
driver.get('http://pepito.proteomics.ics.uci.edu/')
# 定位选择文件按钮,并上传本地文件
driver.find_element_by_xpath("//input[@type='file' and @name='filename']").send_keys(file_name)
# 定位PDB File单选按钮,并点击
driver.find_element_by_xpath("//input[@type='radio' and @name='outputType' and @value='text']").click()
# 定位提交按钮,并点击
driver.find_element_by_xpath("//inpu[@type='submit']").click()
# 等待网页加载全部数据
time.sleep(10)
# 获取跳转网页的网页源码
page_source = driver.page_source
# 下载源码
fp1 = open('Pepito_' + file_name.split('\\')[-1] + '.txt', 'w+')
fp1.write(page_source)
fp1.close()
driver.quit()
except:
fp2 = open('PepitoFail_' + file_name.split('\\')[-1] + '.txt', 'w+')
fp2.close()
driver.quit()
# 防止网页无法写入txt文本
reload(sys)
sys.setdefaultencoding("utf-8")
# 遍历文件
times = time.clock()
files_path = 'C:\\Test\\'
for files in os.walk(files_path):
for index, elem in enumerate(files[2]):
file_name = files_path + '\\' + elem
pepito_web(file_name)
timet = time.clock()
print file_name + ' Done! Time used: ' + str(timet - times)
# # 这是一个做测试的例子语句
# if index == 10:
# break
print 'Game Over!'
尾注:
如果想用火狐浏览器作为selenium的操纵对象,需要下载geckodriver.exe
https://pan.baidu.com/s/1dF6HMrZ
如果想用Chrome作为selenium的操纵对象,需要下载chromedriver.exe
https://pan.baidu.com/s/1eStO3Iy
如果想用PhantomJS作为selenium的操纵对象,需要下载PhantomJS
https://pan.baidu.com/s/1jIj7ckm
且需要将geckodriver/chromedriver/PhantomJS
添加至环境变量中,方可成功使用。
另外我不会用PhantomJS,所以有人下载想用的话,就自行测试。
这样就可以愉快的睡觉,然后把上千条数据传完了。
百日百炼,2017.9.11
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)