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

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐