Python 为什么requests.post在Clustal Omega服务中没有响应?

Python 为什么requests.post在Clustal Omega服务中没有响应?,python,bioinformatics,Python,Bioinformatics,这是我的脚本,我将此请求发送到网站,但结果看起来我什么也没做,web服务没有收到我的请求。这种方法过去适用于其他网站,可能这个页面有一个弹出窗口来询问cookie协议?您所指页面上的表单有一个单独的URL,即 import requests MSA_request=""">G1 MGCTLSAEDKAAVERSKMIDRNLREDGEKAAREVKLLLL >G2 MGCTVSAEDKAAAERSKMIDKNLREDGEKAAREVKLLLL >G3 MGCTLSAEERAAL

这是我的脚本,我将此请求发送到网站,但结果看起来我什么也没做,web服务没有收到我的请求。这种方法过去适用于其他网站,可能这个页面有一个弹出窗口来询问cookie协议?

您所指页面上的表单有一个单独的URL,即

import requests
MSA_request=""">G1
MGCTLSAEDKAAVERSKMIDRNLREDGEKAAREVKLLLL
>G2
MGCTVSAEDKAAAERSKMIDKNLREDGEKAAREVKLLLL
>G3
MGCTLSAEERAALERSKAIEKNLKEDGISAAKDVKLLLL"""
q={"stype":"protein","sequence":MSA_request,"outfmt":"clustal"}
r=requests.post("http://www.ebi.ac.uk/Tools/msa/clustalo/",data=q)
您可以使用浏览器中的DOM检查器验证这一点。 因此,要继续执行
请求
,您需要访问正确的页面

http://www.ebi.ac.uk/Tools/services/web_clustalo/toolform.ebi
这将提交一个包含输入数据的作业,它不会直接返回结果。为了检查结果,有必要从之前的响应中提取作业ID,然后生成另一个请求(没有数据)以

但是,您应该明确检查此程序访问是否与该网站的TOS兼容

以下是一个例子:

http://www.ebi.ac.uk/Tools/services/web_clustalo/toolresult.ebi?jobId=...

非常感谢,它解决了我的问题,但是如何找到正确的URL呢?当我在我的浏览器中输入正确的一个时,它又变成了旧的错误的一个……@NingWang我已经包括了一个示例-但是,也有一个选项可以在本地安装libclustalo并使用clustalo包(Python包装器),感谢您提供详细的答案。如果下一次,我做另一个任务,我怎么知道“”是正确的,而不是我从浏览器复制的url?@NingWang如果打开WebInspector、Firebug或直接检查页面源代码,会出现类似于
-表单将提交到使用
操作
参数指定的url,因此,您可以从原始URL向上移动两个目录,并附加
services/web\u clustalo/toolform.ebi
非常感谢。@ewcz
http://www.ebi.ac.uk/Tools/services/web_clustalo/toolresult.ebi?jobId=...
from lxml import html
import requests
import sys
import time

MSA_request=""">G1
MGCTLSAEDKAAVERSKMIDRNLREDGEKAAREVKLLLL
>G2
MGCTVSAEDKAAAERSKMIDKNLREDGEKAAREVKLLLL
>G3
MGCTLSAEERAALERSKAIEKNLKEDGISAAKDVKLLLL"""
q={"stype":"protein","sequence":MSA_request,"outfmt":"clustal"}

r = requests.post("http://www.ebi.ac.uk/Tools/services/web_clustalo/toolform.ebi",data = q)
tree = html.fromstring(r.text)
title = tree.xpath('//title/text()')[0]

#check the status and get the job id
status, job_id = map(lambda s: s.strip(), title.split(':', 1))
if status != "Job running":
    sys.exit(1)

#it might take some time for the job to finish
time.sleep(10)

#download the results
r = requests.get("http://www.ebi.ac.uk/Tools/services/web_clustalo/toolresult.ebi?jobId=%s" % (job_id))

#prints the full response
#print(r.text)

#isolate the alignment block
tree = html.fromstring(r.text)
alignment = tree.xpath('//pre[@id="alignmentContent"]/text()')[0]
print(alignment)