请求麻烦/美味的汤

时间:2016-02-09 16:36:08

标签: python beautifulsoup python-requests

我正在尝试学习使用Python的som web功能,并且认为我通过编写脚本来登录我大学的网页进行练习。最初我使用urllib2编写了代码,但是用户alecxe使用requests/BeautifulSoup向我提供了代码(请参阅:Website form login using Python urllib2

我正在尝试登录页面http://reg.maths.lth.se/。该页面为学生提供一个登录表单,为教师提供一个登录表单(我显然是在尝试以学生身份登录)。要登录一个应该提供一个“Personnummer”,它基本上相当于一个社会安全号码,所以我不想发布我的有效号码。但是,我可以透露它应该是10位数。

我提供的代码(对最终的print语句进行了一些小改动)如下:

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)

因此应该打印在发布pnr之后获得的页面的源代码。

代码运行时,它总是返回主页http://reg.maths.lth.se/的源代码,这是不正确的。例如,如果您尝试手动输入错误长度的pnr,即0,则应将您定向到如下所示的页面:

enter image description here 位于网址http://reg.maths.lth.se/login/student,其源代码与主页的源代码完全不同。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您没有将POST结果分配给response,而只是打印出第一个GET请求的结果。

所以,

# submit form
session.post(login_url, data={
    "_token": token,
    "pnr": PNR
})

应该是

response = session.post(login_url, data={
    "_token": token,
    "pnr": PNR
})
相关问题