Multipart-form-data, метод POST, с множественными формами на странице

Проблема

Я пытаюсь создать соскабливание на странице с помощью запрос библиотеки python, но получаю ошибки (например, Плохой запрос или Метод не разрешен).

  • На странице есть две формы: одна с 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 (неверный запрос)

rs.get? должен быть rs.post

Saiful Azad 18.11.2018 15:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
664
2

Ответы 2

Я не вижу ссылок на /page1 или /page2 в вашем примере, но rs.get, вероятно, должен использовать именованный параметр params вместо data и должен соответствовать URL-адресу первой формы, тогда как для URL-адреса второй формы вам необходимо использовать метод rs.post, где можно использовать данные.

Я использовал post, но у меня была ошибка, поэтому я попробовал с get и получил еще одну ошибку. Я обновил вопрос с соответствующими ошибками. Srry. Об этом: "Я не вижу ссылки на / page1 или / page2 в вашем примере". Обе формы находятся внутри страницы: www.exampleurl.com/site, поэтому у меня есть 7 кнопок, 6 со значениями для второй формы и одна для первой формы.

Pedro Augusto 19.11.2018 19:12

@PedroAugusto, когда вы загружаете exampleurl.com/site в свой браузер, заполняете поля формы form enctype = "multipart/form-data" action = "/page1" method = "GET" и нажимаете кнопку «Отправить», отправленные составные данные будут добавлены в качестве параметров в запрос GET к exampleurl.com/page1 вашим браузером. Это поведение, которое вам нужно воспроизвести в своем коде.

dlamblin 20.11.2018 07:26

Форма, которую я действительно хочу, связана с публикацией, я пробовал использовать URL-адрес страницы, а также URL-адрес действия, и в обоих случаях возвращал мне ошибки, как я сказал ранее:. Использование get: status_code: 405 (Метод ...) Использование post: status_code: 400 (неверный запрос)

Pedro Augusto 02.12.2018 17:21

Думаю, я нашел ответ. Похоже, что селен плохо работает на страницах, которые работают с фоном js. Я использую селен, и проблем с ним нет.

Привет, добро пожаловать в Stack Overflow. Формулировка вашего ответа не имеет смысла: вы заявляете, что Selenium плохо работает с некоторыми функциями JS, а затем вы заявляете, что используете Selenium и не имеете с ним проблем. Второе предложение логически не следует из первого.

chb 20.03.2019 01:45

Другие вопросы по теме