gpt4 book ai didi

python - 如何将数据发布到网站并立即将您重定向到另一个网站

转载 作者:太空宇宙 更新时间:2023-11-03 20:36:36 26 4
gpt4 key购买 nike

我想批量处理此website ,但是它没有为用户提供批处理模式,所以我正在考虑使用python来提交任务。

我不太熟悉 python 的网络抓取。我在Youtube上看了几个视频,也检查了这里的很多帖子,我可以通过在浏览器上单击鼠标成功登录某些网站,检查元素,转到网络并查看我应该在其中放入哪些数据POST 方法。

但是,这个网站在你提交任务后,会立即为你打开一个新的url,并且网络流程中没有任何POST的迹象。我已经花了几个小时尝试,但仍然不知道如何处理这个网站。谁能帮我这个?

在数据字典中我已经删除了电子邮件,您可以输入您自己的电子邮件地址。如果您成功地将任务发布到此服务器,您应该会收到一封电子邮件,通知您任务完成后的情况。

import requests

url1 = 'http://rna.physics.missouri.edu/vfold3D/index.html'

sequence = 'UCGGACCAUCAGGAGAAAUCCAAUGGAAAACAGGGAAACCCUAAAAGCAAUUUUGGAAGUUUAAAACCGA'
bps = '.((((((((..(((....))).)))).((((.(((...))).((((....))))....))))....))))'
jobname = 'A trial'

data = {}
data['sequence'] = sequence
data['bps'] = bps
data['jobname'] = jobname
data['email'] = '' # give an email address to receive the result

req1 = requests.post(url1, data=data)

print(req1.status_code)

状态代码是 200,但我没有收到电子邮件,所以我认为我没有成功向其发布任何内容。

正如我所说,我不知道应该发送到服务器的正确数据是什么,因为我在网络流中没有看到任何 POST 的痕迹,而且我从来没有学过任何关于 html 和所以对这个网站的结构一无所知...

最佳答案

当您使用 jobname = 'A Trial' 参数打印响应 req1.contents 时,您会收到一个错误页面,指出作业名称中存在空格/无效字符。

Please wait...<br>
<br>
Your input jobname: <br>
A trial
<br>
<br>
<font color="red" size="3">contains non-alphanumeric characters.</font><br>
<br>
</body>
</html>

您必须删除这些空格。

这有效并为您提供检查结果的 URL:

import re
import requests

server_url = 'http://rna.physics.missouri.edu/vfold3D/3D_run.pl'

sequence = 'UCGGACCAUCAGGAGAAAUCCAAUGGAAAACAGGGAAACCCUAAAAGCAAUUUUGGAAGUUUAAAACCGA'
bps = '.((((((((..(((....))).)))).((((.(((...))).((((....))))....))))....))))'
jobname = 'Atrial'

data = {
'sequence': sequence,
'bps': bps,
'jobname': jobname,
'email': ''
}

res = requests.post(server_url,
data=data,
headers={'referer': 'http://rna.physics.missouri.edu/vfold3D/index.html'})
result_url = re.search('<META HTTP-EQUIV=refresh CONTENT="0;URL=([^"]+)', res.text).group(1)
print(result_url)

输出:

http://rna.physics.missouri.edu/OUTPUT/3D_Atrial.E6SY.html

然后您可以访问该 URL 并获取 .pdb 文件。

import requests
import re
from urllib.parse import urljoin

res = requests.get('http://rna.physics.missouri.edu/OUTPUT/3D_Atrial.E6SY.html')
pdb_path = re.search('<a href="(.*\.pdb)">', res.text).group(1)
pdb_url = urljoin(res.url, pdb_path)
print(pdb_url)

输出:

http://rna.physics.missouri.edu/OUTPUT/3D_Atrial.E6SY.3d_struct.pdb
<小时/>

注意:由于这些页面看起来不会很快重新设计,并且结构相对简单,因此使用 re 刮掉一些 URL 是完全可以的。但使用 BeautifulSoup 或其他 HTML 解析器是正确的方法。

关于python - 如何将数据发布到网站并立即将您重定向到另一个网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57126160/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com