自动填充简单的Web表单并检索结果

时间:2015-11-17 15:26:40

标签: python urllib2 autofill

我有一位同事的任务是将患者样本中的丙型肝炎病毒基因序列提交到特定网站的请求表格中,然后确定提供潜在耐药信息的突变。

这非常麻烦,需要数天时间。

我的想法是使用urllib2的Python脚本自动执行此操作(我不能使用机械化,我必须在MAC OS上开发,因为我不理解Python setup.py installpip mechanize install工作 - 所以我必须urllib2)。

我的第一次尝试是访问相应的网站并首先提交样本基因序列。 (在原始网站上,您只需将序列粘贴到名为“或粘贴”的输入字段中,然后按“go”。)

在下一页,您将得到结果,我想通过正则表达式读出突变。

我的第一次尝试:

import url lib
import urllib2

url = 'http://hcv.geno2pheno.org/index.php'
form_data = {'or paste in:': 'CTTCACGGAGGCTATGACGAGGTACTCCGCTCCCCCCGGGGACCCCCCCCAACCAGAATACGACTTGGAGCTCATAACATCGTGCTCCTCTAACGTGTCAGTCGCCCACGACGGCGCTGGAAAAAGGGTCTACTACCTTACCCGTGACCCTACAACCCCCCTCGCAAGAGCTGCGTGGGAGACAGCAAGACACACTCCAGTCAATTCCTGGCTAGGCAACATAATCATGTTTGCCCCCACATTGTGGGCGAGAATGATACTGATGACCCACTTCTTCAGTGTCCTCATCGCCAGGGATCAACTTGAACAGGCCCTTGATTGCGAAATCTACGGAGCCTGCTACTCCATTCAACCACTGGACCTACCTCCAATCATTCAAAGACTCCATGGCCTTAGCGCATTTTCACTCCACAGTTACTCTCCAGGTGAAATCAATAGGGTGGCCGCATGCCTCAGGAAACTTGGGGTCCCGCCCTTGCGAGCTTGGAGACACCGGGCCCGGAGCGTCCGCGCTAAGCTTCTGTCCAGAGGAGGCAGGGCTGCCATATGTGGCAAGTACCTCTTCAATTGGGCAGTAAGAACAAAGCTCAAACTCACTCCAATAGCGGCCGCTGGCCAGCTGGACTTGTCCGGCTGGTTCACGGCTGGCTACAGCGGGGGAGACATTTATCACAGCGTGTCTC'}

params = urllib.urlencode(form_data)
response = urllib2.urlopen(url, params)
data = response.read()
print data

我从“数据”获得的是http://hcv.geno2pheno.org/index.php的源代码,而不是以下结果页。

因此,我有两个问题:

1)我怎样才能确保我的序列正确地粘贴到输入字段“或粘贴到”?

2)如何访问结果页面的源代码以便我可以应用正则表达式?

1 个答案:

答案 0 :(得分:1)

这里有一些问题。首先,您需要在form_data字典中添加更多参数。仅仅因为您只手动填写一个字段并不意味着服务器完成您的请求所需的唯一参数。我已经包含了一个form_data dict,它对我有用。您关注的主要关键是' v3seq'。这是您想要"粘贴在"。

中的序列

然后,当您要求页面时,您需要使用Request对象并阅读该请求的响应。看起来像这样:

import urllib
import urllib2
url = 'http://hcv.geno2pheno.org/index.php'

form_data = {
    'v3seq': 'CTTCACGGAGGCTATGACGAGGTACTCCGCTCCCCCCGGGGACCCCCCCCAACCAGAATACGACTTGGAGCTCATAACATCGTGCTCCTCTAACGTGTCAGTCGCCCACGACGGCGCTGGAAAAAGGGTCTACTACCTTACCCGTGACCCTACAACCCCCCTCGCAAGAGCTGCGTGGGAGACAGCAAGACACACTCCAGTCAATTCCTGGCTAGGCAACATAATCATGTTTGCCCCCACATTGTGGGCGAGAATGATACTGATGACCCACTTCTTCAGTGTCCTCATCGCCAGGGATCAACTTGAACAGGCCCTTGATTGCGAAATCTACGGAGCCTGCTACTCCATTCAACCACTGGACCTACCTCCAATCATTCAAAGACTCCATGGCCTTAGCGCATTTTCACTCCACAGTTACTCTCCAGGTGAAATCAATAGGGTGGCCGCATGCCTCAGGAAACTTGGGGTCCCGCCCTTGCGAGCTTGGAGACACCGGGCCCGGAGCGTCCGCGCTAAGCTTCTGTCCAGAGGAGGCAGGGCTGCCATATGTGGCAAGTACCTCTTCAATTGGGCAGTAAGAACAAAGCTCAAACTCACTCCAATAGCGGCCGCTGGCCAGCTGGACTTGTCCGGCTGGTTCACGGCTGGCTACAGCGGGGGAGACATTTATCACAGCGTGTCTC',
    'H77Switch': '1',
    'ignore_sgtSwitch': '1',
    'alignwidth': '3',
    'action': '1',
    'go': 'Go',
    'viewResults': '1',
    'viewResSec': 'Prediction'
}

data = urllib.urlencode(form_data)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
html_data = response.read()

然后,您可以从响应中抓取数据并应用正则表达式。如果你能够让你的点子工作,我还建议看一下BeautifulSoup - 它是一个很好的库,用于从html中抓取数据。