为什么我在尝试使用 Mechanical Soup 填写表格时收到 400 响应
Why am I getting a 400 response when trying to fill in a form using Mechanical Soup
我目前正在构建一个基本的网络爬虫,它使用 Python 和 MechanicalSoup 从 National Rail 获取火车票价格。
我正在尝试使用基本的火车数据(起点站和终点站,以及日期和时间)填写表格,这样我就可以获得特定火车旅程的票价。
这是我用来填写表格的代码
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)
我遇到的问题是当表单提交时 returns <Response [400]>
。研究使我相信我的表格填写不正确。但是,当执行 browser.launch_browser()
并且打开我的浏览器时,所有字段似乎都已正确填写,如果我自己按下提交,则表单会正确提交并打开正确的票价页面。
有人知道我做错了什么吗?
它只发生在 python3,问题是 requests
将重定向 URL 中的 space 替换为 %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')
我目前正在构建一个基本的网络爬虫,它使用 Python 和 MechanicalSoup 从 National Rail 获取火车票价格。
我正在尝试使用基本的火车数据(起点站和终点站,以及日期和时间)填写表格,这样我就可以获得特定火车旅程的票价。
这是我用来填写表格的代码
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)
我遇到的问题是当表单提交时 returns <Response [400]>
。研究使我相信我的表格填写不正确。但是,当执行 browser.launch_browser()
并且打开我的浏览器时,所有字段似乎都已正确填写,如果我自己按下提交,则表单会正确提交并打开正确的票价页面。
有人知道我做错了什么吗?
它只发生在 python3,问题是 requests
将重定向 URL 中的 space 替换为 %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')