我目前正在构建一个基本的网络爬虫,该爬虫使用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)
我遇到的问题是,表单提交时返回<Response [400]>
。研究使我相信我的表格填写不正确。但是,当执行browser.launch_browser()
并打开我的浏览器时,所有字段似乎都已正确填写,如果我按“提交自己”,则表格将正确提交,并打开正确的票价页面。
有人知道我在做什么错吗?
答案 0 :(得分:1)
它仅在python3中发生,问题是int main()
{
Node* root = new Node("A");
cout << "status adding B to A: " << insert("A", "B", root) << endl; // return true
cout << "status adding E to G: " << insert("G", "E", root) << endl; // return false
cout << "status adding E to B: " << insert("B", "E", root) << endl; // return true
return 0;
}
用requests
替换重定向URL中的空间
%09
您可以对其进行修补,转到第114行
print(response.url)
# http://www.nationalrail.co.uk/times_fares/109179.aspx%09%09%09%09
并替换
python_dir\Lib\site-packages\requests\sessions.py
使用
location = location.encode('latin1')