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

时间:2018-11-18 14:51:07

标签: python python-3.x web-scraping python-requests multiple-forms

问题

我正在尝试使用 请求的python lib 在页面中进行抓取,但是我遇到了错误(例如错误的请求不允许的方法)。

  • 页面有两种形式:一种是get,另一种是post(我希望如此)。我确实使用“数据请求”将值传递到文本字段。

  • 我不想传递用于表单的图像,而只是传递文本字段。

  • 我有六个按钮,每个按钮都有一个不同的值。


HTML代码

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

#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(方法...) 使用帖子:  status_code:400(错误请求)

2 个答案:

答案 0 :(得分:0)

在您的示例中,我没有看到对/page1/page2的引用,但是rs.get应该使用命名参数params而不是{{1 }},并且应该与第一个表单URL对应,而对于第二个表单URL,您需要使用data方法,在这种情况下可以使用数据。

答案 1 :(得分:0)

我想我找到了答案。硒似乎不适用于具有js背景的页面。我正在使用硒,但没有任何问题。