python爬蟲 模擬登陸校園網-初級


最近跟同學學習爬蟲的時候看到網上有個帖子,好像是山大校園網不穩定,用py做了個模擬登陸很有趣,於是我走上了一條不歸路.....

先上一張校園網截圖

 

首先弄清一下模擬登陸的原理:

1:服務器判定瀏覽器登錄使用瀏覽器標識,需要模擬登陸

2: 需要post賬號,密碼,以及學校id

 

python走起,我用的2.7版本,用notepad++寫的,綁定python可以直接運行

 

由於是模擬網頁登陸,需要導入urllib urllib2 cookielib庫,前兩個有與網頁直接的接口,cookielib就是用來處理cookie的

先了解一下這幾個庫函數 一片不錯的博客

http://www.cnblogs.com/mmix2009/p/3226775.html

 

ok,開始構建一個opener

cookie=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))

用urllib2.HTTOCookieProcessor處理CookieJar獲得的cookie,並被build_opener處理

然后構建一下需要post的header,這個地址並不是我們輸入賬號密碼的地址,而是提交數據被處理的地址,在登陸的時候用瀏覽器抓一下:

 

 

嗯 就是右邊的那個URL,我們最后提交的網址就是那個。我們看一下他的header

差不多就這些,可以都寫上,也可以只寫服務器驗證的UA等等

需要提交的數據:

data={
         "username":"xxxxxxxx",
      "password":"xxxxx",
      
     }
post_data=urllib.urlencode(data)

 

然后就是post了,使用Requset(url,post_data,header)

req=urllib2.Request('http://139.198.3.98/sdjd/userAction!login.action',post_data,headers)
content=opener.open(req)

再open(req)放到content里,print一下試試是否成功。

然后.....然后發現失敗了找找bug.....

 

因為是學習的網上的,那個簡單的例子只有用戶名和密碼,而這個登陸還要選擇大學.......

好吧,那就先找下源碼,結果沒找到,就從header里找,果然在cookie里有個schoo id=XXXX,沒錯了,就是這個了,於是在data里再加上這個,結果提交了以后還是失敗。最后發現提交的data里的userName,password,school_必須和request里的名稱大小寫下划線什么的要一致:

 

最終代碼(賬號密碼什么的用XXXX代替了):

import urllib
import urllib2
import cookielib

data={
      "userName":"xxxxxxxx",
      "password":"xxxxx",
      "school_id":"xxxx"
     }
post_data=urllib.urlencode(data)

cookie=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))

headers={
          'Accept': 'text/html, application/xhtml+xml, image/jxr, */*',
          'Accept-Encoding': 'gzip, deflate',
          'Accept-Language': 'en-US, en; q=0.8, zh-Hans-CN; q=0.5, zh-Hans; q=0.3',
          'Connection': 'Keep-Alive',
          'Host': '139.198.3.98',
          'Referer': 'http://139.198.3.98/sdjd/protalAction!loginInit.action?wlanuserip=10.177.31.212&basip=124.128.40.39',
          'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393',    
          'X-Requested-With': 'XMLHttpRequest'
        }     

req=urllib2.Request('http://139.198.3.98/sdjd/userAction!login.action',post_data,headers)
content=opener.open(req)    
     
print content.read().decode("utf-8")

 

運行一下:

初步success~以后在深一步研究

還有求dalao解答我從notepad++上用#注釋沒效果咋回事......

------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------

學習了requests庫 果然好用。。。貼一下代碼

 

import requests

se=requests.Session()

url='http://139.198.3.98/sdjd/userAction!login.action'
data={
      "userName":"xxxxxxxx",
      "password":"xxxxx",
      "school_id":"xxxx"
     }

headers={
          'Accept': 'text/html, application/xhtml+xml, image/jxr, */*',
          'Accept-Encoding': 'gzip, deflate',
          'Accept-Language': 'en-US, en; q=0.8, zh-Hans-CN; q=0.5, zh-Hans; q=0.3',
          'Connection': 'Keep-Alive',
          'Host': '139.198.3.98',
          'Referer': 'http://139.198.3.98/sdjd/protalAction!loginrInit.action?wlanuserip=10.177.31.212&basip=124.128.40.39',
          'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393',    
          'X-Requested-With': 'XMLHttpRequest'
        }         

content=se.post(url,data=data,headers=headers)

print content.text

 // 之前#沒用是沒保存成py格式直接運行了......

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM