Почему я получаю ответ 400 при попытке заполнить форму с помощью Mechanical Soup - PullRequest
0 голосов
/ 28 ноября 2018

В настоящее время я создаю базового веб-мастера, который получает цены на билеты на поезд от National Rail с использованием Python и MechanicalSoup.

Я пытаюсь заполнить форму, используя основные данные о поездах (начало иконечная станция, а также дата и время), поэтому у меня будет доступ к ценам на билеты на конкретную поездку на поезде.

Вот код, который я использовал для заполнения формы

import requests
from bs4 import BeautifulSoup
from bs4 import BeautifulSoup as Soup
import mechanicalsoup

#Mechanical soup
browser = mechanicalsoup.StatefulBrowser()
browser.open("http://www.nationalrail.co.uk/")

#Find the correct form
trainForm = browser.select_form('form[action="http://ojp.nationalrail.co.uk/service/planjourney/plan"]')

#Basic parameters (start and end, and date and time)
browser["from.searchTerm"]                              = "Norwich"
browser["to.searchTerm"]                                = "London Liverpool Street"
browser["timeOfOutwardJourney.monthDay"]                = "28/11/2018"
browser["timeOfOutwardJourney.hour"]                    = 13 
browser["timeOfOutwardJourney.minute"]                  = 15 
browser["_checkbox"]                                    = "off"                           

#Submit the form
browser.launch_browser()
response = browser.submit_selected()

#print the response
print(response)

Проблема, с которой я столкнулся, заключается в том, что при отправке формы она возвращает <Response [400]>.Исследования привели меня к мысли, что моя форма заполнена неправильно.Однако при выполнении browser.launch_browser() и открытии моего браузера все поля выглядят так, как будто они заполнены правильно, и если я нажимаю «Отправить», то форма отправляется правильно, и открывается правильная страница с ценами на билеты.

Кто-нибудь знает, что я делаю не так?

1 Ответ

0 голосов
/ 28 ноября 2018

это происходит только в python3, проблема заключается в requests замене пробела в URL перенаправления на %09

print(response.url)
# http://www.nationalrail.co.uk/times_fares/109179.aspx%09%09%09%09

, вы можете его исправить, перейдите в строку 114

python_dir\Lib\site-packages\requests\sessions.py

и замените

location = location.encode('latin1')

на

location = location.strip().encode('latin1')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...