最近對網絡爬蟲比較感興趣,正巧遇上學習Python階段,因而準備用這把加農炮來實現個人網絡爬蟲學習之路。本次學習就由我所在學校的教務系統做爲實驗對象,哇咔咔,盡情的血虐教務系統吧!(不過好像暴露個人身份了,不要緊,技術爲尊)。html
#構造頭部信息 head = { 'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Encoding' : 'gzip,deflate', 'Accept-Language' : 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'Host' : 'ids.chd.edu.cn', 'Connection' : 'keep-alive', #反爬蟲技術,這個說明咱們是從這個網頁進入的 'Referer' : 'http://ids.chd.edu.cn/authserver/login?service=http://portal.chd.edu.cn/index.portal', 'Upgrade-Insecure-Requests' : '1', #假裝瀏覽器 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0' }接着,咱們來定義一個post,post中有一個lt項,咱們以前看到了,是以前的登陸頁面中的一個表單值,這個是個隨機值,咱們要想正確填寫它,這就須要咱們先獲得這個值,咱們這裏先get頁面內容,而後查找這個值
posturl = "http://ids.chd.edu.cn/authserver/login?service=http://portal.chd.edu.cn/index.portal" #保存cookies,不保存cookie很危險,登錄成功後不保存cookie服務器將不知道你已經登陸 #或者說服務器不知道你是你,就致使得到頁面失敗 s = requests.session() circle = s.get(posturl).text #查找lt字符串 #長大信息門戶中有幾個隱藏表單項,lt表單項爲一個隨機字符串 #其他幾個均爲固定字符串 #因此咱們必須先獲得lt字符串 ltString = '<input type="hidden" name="lt" value=".*?"' ltAnswer = re.findall(ltString, circle) lt = ltAnswer[0].replace('<input type="hidden" name="lt" value="','') #這裏必須轉換爲utf8格式,不然爲Unicode格式,致使亂碼失敗 lt = lt.replace('"','').encode("utf-8")
#構造Post數據 postData = {'_eventId' : "submit", 'btn1' : "", 'dllt' : "userNamePasswordLogin", 'execution': "e1s1", 'lt' : lt, 'password' : "*******", 'rmShown' : "1", 'username' : "123456789", }接下來,就到了見證奇蹟的時刻。咱們要表明瀏覽器向服務器發送數據了n(*≧▽≦*)n。一樣,代碼以下:
loginhtml = s.post(posturl,data=postData,headers=head) url2 = 'http://portal.chd.edu.cn' head2 = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0', 'Referer' : 'http://ids.chd.edu.cn/authserver/login?service=http://portal.chd.edu.cn/index.portal'} scorehtml = s.get(url2,headers=head2) print scorehtml.text.decode('gbk','ignore')這時,咱們得到了登錄成功後的頁面。有的服務器有IP地址限制,須要不斷更換IP地址,不過Python也給了咱們解決辦法,關於這方面的知識你們有興趣的能夠百度,我就不給出具體信息了~~
# -*- coding: utf-8 -*- import requests import sys import urllib2 import re if __name__ == "__main__": ## 這段代碼是用於解決中文報錯的問題 reload(sys) sys.setdefaultencoding("utf8") posturl = "http://ids.chd.edu.cn/authserver/login?service=http://portal.chd.edu.cn/index.portal" #保存cookies,不保存cookie很危險,登錄成功後不保存cookie服務器將不知道你已經登陸 #或者說服務器不知道你是你,就致使得到頁面失敗 s = requests.session() circle = s.get(posturl).text #查找lt字符串 #長大信息門戶中有幾個隱藏表單項,lt表單項爲一個隨機字符串 #其他幾個均爲固定字符串 #因此咱們必須先獲得lt字符串 ltString = '<input type="hidden" name="lt" value=".*?"' ltAnswer = re.findall(ltString, circle) lt = ltAnswer[0].replace('<input type="hidden" name="lt" value="','') #這裏必須轉爲utf8格式,不然傳過去的值爲Unicode編碼,致使亂碼失敗 lt = lt.replace('"','').encode("utf-8") #構造頭部信息 head = { 'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Encoding' : 'gzip,deflate', 'Accept-Language' : 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'Host' : 'ids.chd.edu.cn', 'Connection' : 'keep-alive', #反爬蟲技術,這個說明咱們是從這個網頁進入的 'Referer' : 'http://ids.chd.edu.cn/authserver/login?service=http://portal.chd.edu.cn/index.portal', 'Upgrade-Insecure-Requests' : '1', #假裝瀏覽器 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0' } #構造Post數據 postData = {'_eventId' : "submit", 'btn1' : "", 'dllt' : "userNamePasswordLogin", 'execution': "e1s1", 'lt' : lt, 'password' : "*******", 'rmShown' : "1", 'username' : "123456789", } loginhtml = s.post(posturl,data=postData,headers=head) url2 = 'http://portal.chd.edu.cn' head2 = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0', 'Referer' : 'http://ids.chd.edu.cn/authserver/login?service=http://portal.chd.edu.cn/index.portal'} scorehtml = s.get(url2,headers=head2) print scorehtml.text.decode('gbk','ignore')好了,本次實驗到此結束,歡迎一塊兒學習更多知識!