python抓取学校需要用户登录的网页

2024-06-25 23:18:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python来抓取我学校的网页,但是为了做到这一点,我需要先模拟用户登录。这是我的代码:

import requests, lxml.html
s = requests.session()

url = "https://my.emich.edu"

login = s.get(url)

login_html = lxml.html.fromstring(login.text)
hidden_inputs = login_html.xpath(r'//form//input[@type="hidden"]')
form = {x.attrib["name"]:x.attrib["value"] for x in hidden_inputs}
form["username"] = "myusernamge"
form["password"] = "mypassword"
form["submit"] = "LOGIN"

response = s.post("https://netid.emich.edu/cas/loginservice=https%3A%2F%2Fmy.emich.edu%2Fc%2Fportal%2Flogin",form)
response = s.get("http://my.emich.edu")

f = open("result.html","w")
f.write(response.text)

print response.text

我正期待着呢响应.text会给我自己的学生帐户页,而不是它给我一个登录要求页。有人能帮我解决这个问题吗? 顺便说一句,这不是家庭作业


Tags: texthttpsformurlgetresponsemyhtml
2条回答

这里有几个选项,我认为您的请求方法可以通过手动登录和复制头来简化。在

  1. 使用类似于http://wwwsearch.sourceforge.net/mechanize/的python脚本包来抓取站点。在
  2. 使用浏览器模拟器,如http://casperjs.org/。使用这个你基本上可以做任何你在浏览器中可以做的事情。在
  3. 我在这里的建议是转到网站,登录,然后打开开发人员控制台,将这些头/cookie复制到您的请求头/cookies中。这样你就可以对“已经认证的请求”进行硬编码,这样就可以正常工作了。请注意,对于执行健壮的日常抓取,此方法是最不可靠的,但是如果您正在寻找最快实现的方法,并且在身份验证结束之前都可以工作,那么请使用此方法。在

另外,你需要请求登录主页(再次)后,你成功地做了帖子。在

相关问题 更多 >