- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想批量处理此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/
我是一名优秀的程序员,十分优秀!