从Python发送请求到网站的任何建议?

时间:2013-12-05 07:41:44

标签: python html css urllib2 bioinformatics

def align_sequences(IDs):
    import webbrowser
    import urllib,urllib2
    url = 'http://www.uniprot.org/align/'
    params = {'query':IDs}
    data = urllib.urlencode(params)
    request = urllib2.Request(url, data)
    response = urllib2.urlopen(request)
    job_url = response.geturl()
    webbrowser.open(job_url)
align_sequences('Q4PRD1 Q7LZ61')

使用此功能,我想打开“http://www.uniprot.org/align/”,请求ID Q4PRD1和Q7LZ61的蛋白质序列对齐,然后在浏览器中打开网站。

最初似乎工作正常 - 运行脚本将打开网站并显示正在运行的对齐作业。但是,即使我刷新页面,它也会永远持续下去并且永远不会完成。如果我在浏览器中输入ID并点击“对齐”,它就可以正常工作,大约需要8秒才能对齐。

我不熟悉直接从浏览器运行和从Python运行它之间的区别。你们中的任何人都知道可能出现的问题吗?

谢谢:-) 〜最大

2 个答案:

答案 0 :(得分:2)

您必须点击align按钮。但是,您无法使用webbrowser执行此操作。一种选择是使用selenium

from selenium import webdriver

url = 'http://www.uniprot.org/align/'
ids = 'Q4PRD1 Q7LZ61'

driver = webdriver.Firefox()
driver.get(url)
q = driver.find_element_by_id('alignQuery')
q.send_keys(ids)
btn = driver.find_element_by_id("sequence-align-submit")
btn.click()

答案 1 :(得分:1)

我认为这是在javascript中。如果你查看按钮Align的html代码,你可以看到

onclick="UniProt.analytics('AlignmentSubmissionPage', 'click', 'Submit align'); submitAlignForm();"

UniProt.analytics()submitAlignForm()一些javascript魔法。 js-compr.js2013_11文件中的这个魔法。

您可以使用http://jsbeautifier.org/查看此文件,然后在python上查看javascript。