multipart-form-data,POST方法,页面中有多个表单

问题描述 投票:0回答:2

问题

我正在尝试使用request的python lib在页面中进行抓取,但是我遇到了错误(如Bad request或Method not allowed)。

  • 该页面有两种形式:一种是get,另一种是post(我希望)。我确实使用'数据请求'将值传递给文本字段。
  • 我不想传递表单的图像,只是文本字段。
  • 我在表单中有六个按钮,对于每个按钮,我有不同的值。

HTML code

<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>

Python3 code

#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))

EDIT

使用get:status_code:405(方法...)使用post:status_code:400(错误请求)

python python-3.x web-scraping python-requests multiple-forms
2个回答
0
投票

我在你的例子中没有看到对/page1/page2的引用,但是rs.get应该使用命名参数params而不是data并且应该对应于第一个表单URL,而对于第二个表单URL,你需要使用rs.post方法,使用数据是可以的。


0
投票

我想我找到了答案。似乎selenium在使用js background的页面上效果不佳。我正在使用硒,我没有遇到问题。

© www.soinside.com 2019 - 2024. All rights reserved.