我正在尝试使用request的python lib在页面中进行抓取,但是我遇到了错误(如Bad request或Method not allowed)。
<form enctype="multipart/form-data" action="/page1" method="GET"> ... </form>
...
<form enctype="multipart/form-data" action="/page2" method="POST">
<input type="file" name="smiles_file">
<input type="text" name="smiles_str">
...
<button name="pred_type" type="submit" value="adme"> BT1 </button>
<button name="pred_type" type="submit" value="toxicity"> BT2 </button>
</form>
#imports
import requests
from bs4 import BeautifulSoup as bs
#commmon vars
url = 'www.exampleurl.com/site'
hd = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"
}
dt = {
'smiles_str': 'CC(=O)OC1=CC=CC=C1C(=O)O',
'pred_type': 'adme'
}
#scraping
with requests.Session() as rs:
result = rs.get(url, data=dt, headers=hd)
print ("Code: %s\nHTML\n%s" % (result.status_code, result.text))
使用get:status_code:405(方法...)使用post:status_code:400(错误请求)
我在你的例子中没有看到对/page1
和/page2
的引用,但是rs.get
应该使用命名参数params
而不是data
并且应该对应于第一个表单URL,而对于第二个表单URL,你需要使用rs.post
方法,使用数据是可以的。
我想我找到了答案。似乎selenium在使用js background的页面上效果不佳。我正在使用硒,我没有遇到问题。