利用python的selenium模块向Plant-mPLoc提交数据

  • 流程一般步骤
    • 1.对数据的预处理
    • 2. 环境的配置
    • 3.代码分析及流程思想
  • 回顾和展望

流程一般步骤

  首先我们对得到的序列预处理,然后进行信息的提取,包括利用正则表达式对序列号的获取,以便序列号和数据结果的匹配和每次向网页提交一条完整的序列,最后是结果的保存。

1.对数据的预处理

  因为笔者使用的是ExPASy对核苷酸序列开发阅读框进行预测(偶然发现这个也可以=。=),得到的最有可能的开放阅读框的格式为(以得到的第一个为例)

> VIRT-87894:5’3’ Frame 2, start_pos=0
GLGPSMATMLSRANAVMNSEVHKTVLITGVSKGLGRALALEMAKRGHTII
GCSRTQDMLYSLQAELSSASSSHPGSNSSPDKHLFMSVDVKSNSSVEELA
HVVMEKKGVPDIIVNNAGTINKNNRIWEVPVEEFDGVIDTNVKGIANMLR
HFIPLMIEGKQGIIVNMSSGWGRSAAAQVAPYCASKWAIEGLTRSVAKEL
PSGIAIVALNPGVINTDMLASCFGNSASLYQAPEAWAPTAATMILNLTMA DNGASLTV

在每条FASTA格式的序列第一行后面加上他的序列号,中间以一个空格隔开。(如Unigene5868)

  所以当时你获取数据的时候就该把序列号和序列一一对应,还好笔者当时就是这样做的,所以在后面构建目标文件的时候没费多大时间。这样你就构建一个目标文件,每条序列之间隔一行,隔几行也行,但是要保证隔开的行数都是一样的,等下正则匹配要用。这样我们这个流程就结束了,这样处理也方便我们后继的其他操作,如蛋白质理化性质的分析等,不用再重新整理。

2. 环境的配置

  (python3.7 pycharm )的配置就不再这里详细阐述了,可以去看看别人的教程,selenium库的获取,在你配置好的环境情况下,windows窗口下输入 cmd,打开控制行界面,输入下面命令就行了。

pip install selenium

  当然只有这个模块肯定是不行的,你还得需要相应的浏览器驱动,不同的浏览器驱动是不一样滴,具体步骤百度完全能行,这里可以参考一篇博客 1特别注意的是把驱动放入相应浏览器安装目录下,我选择的是火狐浏览器(‘C:\Program Files\Mozilla Firefox’)安装路径,然后将这个路径添加到环境变量中(path)。这就是主要的环境配置了,接下来就是一些详细的步骤了。

3.代码分析及流程思想

  Selenium大量的运用于python自动化测试及爬虫中,在这里我们就不深究其底层原理,具体说明一下它的使用。它能够定位当前浏览页面的元素,从而对其进行一些如添加数据、点击、清除该元素内已添加的内容等,也就说能模仿人类对该网页进行的操作。常见一些操作及定位元素的方法2
  向网站提交数据具体包括三步:1.向输入框提交数据;2.点击提交按钮;3.等待网站服务器返回结果,并对结果进行保存。我们先尝试一下拿单独的一条序列进行测试,然后再推广到所有的序列中。

from selenium import webdriverdata = """> VIRT-87894:5'3' Frame 2, start_pos=0 Unigene5868
GLGPSMATMLSRANAVMNSEVHKTVLITGVSKGLGRALALEMAKRGHTII
GCSRTQDMLYSLQAELSSASSSHPGSNSSPDKHLFMSVDVKSNSSVEELA
HVVMEKKGVPDIIVNNAGTINKNNRIWEVPVEEFDGVIDTNVKGIANMLR
HFIPLMIEGKQGIIVNMSSGWGRSAAAQVAPYCASKWAIEGLTRSVAKEL
PSGIAIVALNPGVINTDMLASCFGNSASLYQAPEAWAPTAATMILNLTMA
DNGASLTV"""browser = webdriver.Firefox()  # 打开火狐浏览器 如果你环境没配置好 会报错
browser.get('http://www.csbio.sjtu.edu.cn/bioinf/plant-multi/')
# 在get()里面输入你要进入的网址 它会自动进入# 进入目标网址后 把鼠标移入序列输入框 右键检查元素 浏览器下面会弹出一个
# 查看器 该元素会以高亮的颜色显示 我们发现该元素的 name属性值为"S1"
# 我们在查看器里 Ctrl + F 查找 "S1" 我们发现name="S1" 只有一个
# 这样就可以对输入框进行定位 同理的提交按钮的name属性值为 "B1"input_box = browser.find_element_by_name("S1") # 通过name属性的值来定位输入框元素
input_box.send_keys(data)  # 把序列输入查找到的输入框
submit_button = browser.find_element_by_name("B1")  # 定位提交按钮
submit_button.click()  # 模拟鼠标点击提交按钮

  相信大家会得到一个结果页面,但是得到的结果怎么保存呢,不能每次只提交一个吧。其实结果的保存有很多种方法,一种是直接对得到的结果页面进行截图,还有就是对得到的网页进行数据提取,而提取又有很多种方法,一种为正则表达式提取,一种是Xpath提取,相关的数据提取手段大家可以有时间去了解一下,我这里等下介绍的是截图的手段,在下一篇的博客中将会介绍正则表达式的匹配。
  当使用截图的方法,调用下面的方法,它会把当前页面截图并保存

browser.get_screenshot_as_file(file_name +'.png')   # 输入你想保存成的名字

  但是我们会发现有一个问题,我们把数据输入提交进去,它会有一个提交的过程,并不是直接出结果。所以我自然而然的想到能不能让这个程序等一段时间再截图。

import time
time.sleep(40)  # 把这行代码放到截图行代码前 它将会等40s 再执行截图的代码

  但是这又会引出一个问题,并不是所有的等待时间都是40s,有些很快10来秒就行了,网络没问题的话一般40s以内,但是这算不算时间的浪费,等的时间会不会太长了,有没有更好的方法呢?经过了解发现,selenium有两种等待方法,一种是隐式等待,另一种是显式等待。具体的区别大家可以参考这个博文3。在这里我们使用的是隐式等待,规定的时间是对页面中的所有元素或你要查找的元素设置加载时间,只要加载完,就立马进行下一步,如果超时就会报错,关于错误的处理,将会在下一篇博客中介绍。我们查找结果页面和提交数据页面的差别,发现结果页面有一个id值为’table1‘的独特值,我们可以用它来定位结果页面。

browser.find_element_by_name("S1").send_keys(data)
browser.find_element_by_name("B1").click()
browser.implicitly_wait(60)  # 程序会在这等到页面加载完才会进行下一步 最长为60s
browser.find_element_by_id('table1')  # 保证得到的是结果页面
browser.get_screenshot_as_file(photo_path)  # 设置保存截图的路径

  这样我们就获得了一条序列的结果图了,这里为了演示,所以采用了保存为图的结果,需要的情况下可以直接提取亚细胞定位的结果字符串,在以后的学习中我们会讲到。下面是单次操作的完整代码:

from selenium import webdriverdata = """> VIRT-87894:5'3' Frame 2, start_pos=0 Unigene5868
GLGPSMATMLSRANAVMNSEVHKTVLITGVSKGLGRALALEMAKRGHTII
GCSRTQDMLYSLQAELSSASSSHPGSNSSPDKHLFMSVDVKSNSSVEELA
HVVMEKKGVPDIIVNNAGTINKNNRIWEVPVEEFDGVIDTNVKGIANMLR
HFIPLMIEGKQGIIVNMSSGWGRSAAAQVAPYCASKWAIEGLTRSVAKEL
PSGIAIVALNPGVINTDMLASCFGNSASLYQAPEAWAPTAATMILNLTMA
DNGASLTV"""browser = webdriver.Firefox()  # 打开火狐浏览器 如果你环境没配置好 会报错
browser.get('http://www.csbio.sjtu.edu.cn/bioinf/plant-multi/')
# 在get()里面输入你要进入的网址 它会自动进入# 进入目标网址后 把鼠标移入序列输入框 右键检查元素 浏览器下面会弹出一个
# 查看器 该元素会以高亮的颜色显示 我们发现该元素的 name属性值为"S1"
# 我们在查看器里 Ctrl + F 查找 "S1" 我们发现name="S1" 只有一个
# 这样就可以对输入框进行定位 同理的提交按钮的name属性值为 "B1"input_box = browser.find_element_by_name("S1") # 通过name属性的值来定位元素
input_box.send_keys(data)  # 把序列输入查找到的输入框
submit_button = browser.find_element_by_name("B1")  # 定位提交按钮
submit_button.click()  # 模拟鼠标点击提交按钮
browser.implicitly_wait(60)
browser.find_element_by_id('table1') #保证得到的是结果页面
browser.get_screenshot_as_file('finally_path')  # 这里填你想保存图片的路径


  因为我们得到的是一个以txt格式保存的文件,里面含有20条序列,我们该怎么把这些序列单独的提取出来呢?我们可以使用python的文件处理操作和正则匹配来对单个数据进行提取。具体操作如下

import redata = open('C:\\Users\\24395\\PycharmProjects\\selenium-text\\total_sample.txt', 'r', encoding='utf-8').read()  # open函数里面第一个参数是文件路径 你可以换成自己的
pattern = re.compile('start_pos=\d+\s(.*?)\n')
total_str = data.split('\n\n')  # 通过两个换行符对文本进行切割 这也就是为什么每条序列之间要空一行 加上序列末端的换行符 一共是两个
title = re.findall(pattern, data)  # total_str 和 title 都是列表格式 它们的值也是一一对应的


然后我们在对提取出来的序列和它的序列号匹配,带入单条序列的操作模式,不过需要注意一点的是,我们肯定不能每操作一次,打开关闭浏览器各一次,而且这样会报错,服务器拒绝响应,一般把浏览器关闭以后,会话不会直接断开。我们发现在结果页面有一个Home page链接,可以通过它返回到输入数据的界面,这样可以一直循环,往服务器提交数据。接下来展示完整的代码及分析结果,我在一些步骤设置了时间间隔,避免它速度太快。

from selenium import webdriver
import time
import redef one_submit(browser, one_str, sequence_number):  # 一个完整提交页面的流程browser.find_element_by_name("S1").send_keys(one_str)browser.find_element_by_name("B1").click()browser.implicitly_wait(60)browser.find_element_by_id('table1')  # 保证得到的是结果页面finally_path = 'C:\\Users\\24395\\PycharmProjects\\selenium-text\\细胞定位图\\' + sequence_number + '.png'browser.get_screenshot_as_file(finally_path)time.sleep(2)browser.find_element_by_link_text('Home Page').click()  # 返回输入数据页面def main():data = open('total_sample.txt', 'r', encoding='utf-8').read()pattern = re.compile('start_pos=\d+\s(.*?)\n')total_strs = data.split('\n\n')  # 通过两个换行符对数据进行切割,切割成单条序列sequence_numbers = re.findall(pattern, data) # 查找序列号browser = webdriver.Firefox()browser.get('http://www.csbio.sjtu.edu.cn/bioinf/plant-multi/')for i in range(len(sequence_numbers)):time.sleep(3)one_submit(browser, total_strs[i], sequence_numbers[i])main()

下面是结果:

其中第一条序列的结果如下:结果显示它的亚细胞定位预测结果为Chloroplast(叶绿体)

回顾和展望

  这里笔者介绍了一种利用selenium模块来模拟人向Plant-mPLoc提交数据,虽然这里只有20条序列,当处理的序列数很多时,我们也可以利用这种方法,可以直接匹配结果字符串,再和序列号一一对应导入数据库中,但是笔者刚学没多久,希望在后续的学习中努力提升自己。当然,读者有更好的方法或者我存在什么错误,欢迎大家指正,如果读者有什么问题,可以提出来,我们一起学习进步。如果有超大量的数据,我觉得应该有更好的方法来处理,让我们一起去发现吧!


  1. selenium对应三大浏览器(谷歌、火狐、IE)驱动安装 ↩︎

  2. Selenium官网教程 ↩︎

  3. selenium的等待,三种等待方式解读 ↩︎

利用python的selenium模块向Plant-mPLoc提交数据相关推荐

  1. Python学习--Selenium模块

    1. Python学习--Selenium模块介绍(1) 2.Python学习--Selenium模块学习(2) 其他: 1. Python学习--打码平台 转载于:https://www.cnblo ...

  2. python使用selenium模块实现火车票的自动购买

    python使用selenium模块实现火车票的自动购买 python使用selenium模块实现火车票的自动购买 实现功能描述 直接撸代码 总结 实现功能描述 程序运行后会打开一个浏览器界面定义其尺 ...

  3. python中selenium模块驱动谷歌详解

    python中selenium模块驱动谷歌详解 Selenium的介绍.配置和调用 Selenium(浏览器自动化测试框架) 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中 ...

  4. python爬人人贷代码视频_【IT专家】人人贷网的数据爬取(利用python包selenium)

    本文由我司收集整编,推荐下载,如有疑问,请与我司联系 人人贷网的数据爬取(利用 python 包 selenium ) 2016/12/31 0 记得之前应同学之情,帮忙爬取人人贷网的借贷人信息,综合 ...

  5. Python用 selenium 模块控制Firefox浏览器

    Python用 selenium 模块控制Firefox浏览器 需要的东西: Firefox浏览器下载地址: http://getfirefox.com/ selenium包: https://pyp ...

  6. python3wxpy下载_如何利用python之wxpy模块玩转微信

    wxpy也是一个python的模块,利用它我们可以做很多有意思的事情 首先利用一句代码我们就可以利用python登录网页版微信 bot = Bot(cache_path= True) 这条语句会产生一 ...

  7. 说说如何利用 Python 的 requests 模块,从网络下载电子小说

    利用 Python 的 requests 模块可以很容易从网络下载电子小说,甚至可以处理 https 连接!首先必须先安装该模块. 通过命令行,运行 -> pip install request ...

  8. 用python通过selenium自动化测试抓取天猫店铺数据

    用python通过selenium自动化测试抓取天猫店铺数据 运行的环境在win10,软件用的是vscode.大家平常在抓取天猫店铺的时候登陆后会需要验证,我的方法是通过谷歌插件跳过天猫的登陆. 首先 ...

  9. 【Python数据分析】利用Python删除EXCEL表格中指定的列数据或行数据

    如何利用Python删除EXCEL表格中指定的列数据?今天与大家一起分享一下DataFrame对象的drop()函数,drop()函数可根据标签删除EXCEL表格中的列数据或行数据,其语法格式如下: ...

最新文章

  1. java -jar 和 -cp详解
  2. 手绘风格的数据可视化 Sketchify,让你的图表也萌萌哒
  3. JSON数据格式必知
  4. 《系统集成项目管理工程师》必背100个知识点-64采购文件
  5. WinForm 数据库无限填充树目录 treeView
  6. RabbitMq 本地连接报错 org.springframework.amqp.AmqpIOException: java.io.IOException
  7. python全栈开发内容_Python全栈开发之Day02
  8. x86异常处理与中断机制(2)中断向量表
  9. 【leetcode❤python】172. Factorial Trailing Zeroes
  10. linux内核态删除文件函数,初探Linux内核态——通过proc文件系统作快速问题定位...
  11. 【基于JXTA的P2P应用开发】
  12. 便捷注册live、MSN邮箱
  13. ckplayer快速入门
  14. 全职高手24职业及技能(Full time master)
  15. 29.Go异常处理-recover
  16. 是什么引发了我对知识的渴望
  17. 89C52RC控制 WS2812B
  18. 从零入门云计算(1):云计算究竟是个啥?
  19. python导出结果_Python连接Oracle数据查询导出结果
  20. 基于JAVA小区智能停车位管理系统

热门文章

  1. dell服务器快速服务码查询序列号,dell服务器快速设置idrac
  2. ESP32进行UDP广播的问题
  3. 扩张状态观测器matlab函数,基于Matlab的扩张状态观测器仿真及分析探究.pdf
  4. 基于区域生长和形态学处理的图像融合方法——Matlab图像处理
  5. 痛定思痛 之 追求完美
  6. 10G数据,1G内存,如何排序?
  7. Python小白学习笔记六 (面向对象 1 )
  8. PHP 实现图片压缩
  9. 适合学生党的平价蓝牙耳机有哪些?2022年降噪蓝牙耳机推荐
  10. python四瓣花代码_小蛇学python(14)K-means预测花朵种类