【问题标题】:Trouble with requests/Beautiful soup请求问题/美丽的汤
【发布时间】: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


    【解决方案1】:

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

    所以,

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

    应该是

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

    【讨论】:

      猜你喜欢
      • 2011-08-07
      • 2013-10-30
      • 2023-03-27
      • 2021-04-24
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多