我正在尝试以编程方式使用此工具http://www.idtdna.com/calc/analyzer,以便我可以批量分析几十个DNA序列。
在Chrome的开发者工具中偷看,我看到我在点击Analyze按钮时发送POST请求(在Sequence字段中输入序列(例如“AACCGGTT”)之后)。在Response选项卡中,我还可以看到我希望收集的响应(例如“MeltTemp”)。因此,按照教程(http://docs.python-requests.org/en/latest/user/quickstart/#make-a-request),我将下面的代码段放在一起,但它显然无效。
>>> import requests
>>> url = 'http://www.idtdna.com/calc/analyzer/home/analyze' # from: ChromeDevTools -> Network -> Name: analyze -> tab: Headers -> General -> Request URL
>>> data = {"settings":{"Sequence":"AACCGGTT", # from: ChromeDevTools -> Network -> Name: analyze -> tab: Headers -> Request Payload
"NaConc":50,
"MgConc":0,
"DNTPsConc":0,
"OligoConc":0.25,
"NucleotideType":"DNA",
}}
>>> r = requests.post(url, data=data)
>>> r.url # 404 page
u'http://www.idtdna.com/404.aspx?aspxerrorpath=/calc/analyzer/home/analyze'
# I was hoping for something like this that gives me the JSON response (which can be found at
# ChromeDevTools -> Network -> Name: analyze -> tab: Response)
>>> r.some_magical_function()
{"Sequence":"AAC CGG TTG GTT AAT T","NaConc":50, ... "MeltTemp":45.1, ...}
我错过了什么?
帖子请求是否需要更复杂(使用cookies?session ??)?如果是这样,请提供我需要学习的内容(或解决方案:p)
我理解网站是否有防范这种用法的保护措施;如果基本上不可能,那么你建议采取什么策略?硒?
答案 0 :(得分:2)
request.Session
设置Cookie的实际请求之前至少访问该网页一次)json=...
参数)import requests
url = 'http://sg.idtdna.com/calc/analyzer/home/analyze'
data = {
'settings': {
'Sequence': 'AACCGGTT',
'NaConc': 50,
'MgConc': 0,
'DNTPsConc': 0,
'OligoConc': 0.25,
'NucleotideType': 'DNA',
}
}
s = requests.Session()
s.get('http://sg.idtdna.com/calc/analyzer') # to set cookies
r = s.post(url, json=data)
print(r.json())
<强>更新强>
根据位置,不会发生重定向。在这种情况下,请使用www.idtdna.com
代替sg.idtdna.com
。