通过登录页面从网站上抓取数据

问题描述 投票:0回答:2

我正在尝试使用 python 和请求库使用以下代码登录我的大学网站,但我无法登录。

import requests

payloads = {"User_ID": <username>,
"Password": <passwrord>,
    "option": "credential",
"Log in":"Log in"
}
with requests.Session() as session:
    session.post('', data=payloads)
    get = session.get("")
print(get.text)

有人知道我做错了什么吗?

python python-3.x authentication web-scraping python-requests
2个回答
0
投票

为了登录,您需要发布

<input>
标签所要求的所有信息。在您的情况下,您还必须提供隐藏的输入。您可以通过抓取这些值然后发布它们来完成此操作。您可能还需要发布一些标头来模拟浏览器行为。

from lxml import html
import requests

s = requests.Session()
login_url = "https://intranet.cardiff.ac.uk/students/applications"
session_url = "https://login.cardiff.ac.uk/nidp/idff/sso?sid=1&sid=1"
to_get = s.get(login_url)
tree = html.fromstring(to_get.text)
hidden_inputs = tree.xpath(r'//form//input[@type="hidden"]')
payloads = {x.attrib["name"]: x.attrib["value"] for x in hidden_inputs}
payloads["Ecom_User_ID"] = "<username>"
payloads["Ecom_Password"] = "<password>"
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
result = s.post(session_url, data=payloads, headers = headers)

希望这有效


-1
投票

为了使用Python登录网站,您将不得不使用比请求库更复杂的方法,因为您必须在代码中模拟浏览器并让它发出登录学校网站服务器的请求。这样做的原因是,您需要学校的服务器认为它正在从浏览器获取请求,然后它应该返回结果页面的内容,然后您必须呈现这些内容,以便您可以抓取它。幸运的是,一个很好的方法是使用 python 中的 selenium 模块。

我建议您通过谷歌搜索来了解有关硒的更多信息。 这篇博文是使用selenium登录网页的一个很好的例子,其中详细解释了每行代码的作用。 这个有关使用硒登录网站的答案也可以作为执行此操作的切入点。

© www.soinside.com 2019 - 2024. All rights reserved.