【发布时间】:2016-05-19 17:58:39
【问题描述】:
我正在尝试学习使用 Python 的一些网络功能,并认为我会通过编写脚本来登录我大学的网页来练习。最初我使用urllib2 编写代码,但用户alecxe 好心地为我提供了使用requests/BeautifulSoup 的代码(请参阅:Website form login using Python urllib2)
我正在尝试登录页面http://reg.maths.lth.se/。该页面具有一个学生登录表单和一个教师登录表单(我显然试图以学生身份登录)。要登录,应该提供一个“Personnummer”,它基本上相当于一个社会安全号码,所以我不想发布我的有效号码。但是,我可以透露它应该是 10 位数长。
提供给我的代码(对最终打印语句稍作改动)如下:
import requests
from bs4 import BeautifulSoup
PNR = "00000000"
url = "http://reg.maths.lth.se/"
login_url = "http://reg.maths.lth.se/login/student"
with requests.Session() as session:
# extract token
response = session.get(url)
soup = BeautifulSoup(response.content, "html.parser")
token = soup.find("input", {"name": "_token"})["value"]
# submit form
session.post(login_url, data={
"_token": token,
"pnr": PNR
})
# navigate to the main page again (should be logged in)
#response = session.get(url) ##This is deliberately commented out
soup = BeautifulSoup(response.content, "html.parser")
print(soup)
因此应该打印POST pnr后获得的页面的源代码。
代码运行时,总是返回主页http://reg.maths.lth.se/的源代码,这是不正确的。例如,如果您尝试手动输入错误长度的 pnr,即 0,您应该被定向到如下所示的页面:
位于网址http://reg.maths.lth.se/login/student,其源代码与主页的源代码明显不同。
有什么建议吗?
【问题讨论】:
标签: python beautifulsoup python-requests