簡體   English   中英

需要用戶登錄的python抓取學校的網頁

[英]python scraping school's webpage which requires user login

我正在使用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

我期望response.text將給我我自己的學生帳戶頁面,而不是給我一個登錄要求頁面。 有人可以幫我解決這個問題嗎? 順便說一句,這不是家庭作業

這里有一些選項,我認為可以通過手動登錄並復制標頭來簡化您的請求方法。

  1. 使用類似http://wwwsearch.sourceforge.net/mechanize/的python腳本包來抓取該網站。
  2. 使用瀏覽器仿真器,例如http://casperjs.org/ 使用此功能,您基本上可以執行瀏覽器中可以執行的任何操作。
  3. 我的建議是進入網站,登錄,然后打開開發人員控制台,然后將這些標頭/ cookie復制到您的請求標頭/ cookie中。 這樣,您就可以對“已通過身份驗證的請求”進行硬編碼,它將正常工作。 請注意,此方法對於進行健壯的日常抓取是最不可靠的,但是,如果您要尋找最快實現並且在身份驗證用完之前可以使用的方法,請使用此方法。

此外,成功完成發布后,您需要再次請求登錄的主頁。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM