Python爬蟲實戰——模擬登錄教務系統

之前都是爬靜態頁面,不用登錄的,這次試試有登錄的。

網頁的登錄主要是發送POST請求到服務器,得到響應後跳轉到登錄界面。每次登錄,瀏覽器都會記錄下cookie信息,在python中,可以用urllib,urllib2來獲取cookie信息,然後利用cookie信息來模擬登錄。當然還是得輸入登錄名和密碼的。

先在瀏覽器上登錄教務系統,登錄後查看POST請求裏面請求信息,就可以看到發送了什麼信息過去了。


源碼如下,用了兩種方式,分別是urllib,urllib2和request

import urllib
import urllib2
import cookielib
import requests

# 要傳送的表單數據
user_data = {
    "typeid": "2",
    "user": "******",
    "pass": "******"
}
# 寫入cookie的文件
filename = 'cookie.txt'
# 聲明一個CookieJar對象實例來保存cookie,之後寫入文件
cookie = cookielib.MozillaCookieJar(filename)
# 利用urllib2庫的HTTPCookieProcessor對象來創建cookie處理器
handler = urllib2.HTTPCookieProcessor(cookie)
# 通過handler來構建opener
opener = urllib2.build_opener(handler)
# 傳送用戶名和密碼
post_data = urllib.urlencode(user_data)
login_url = '******'
# 學校網站採用了反爬蟲策略,要僞裝瀏覽器訪問
headers = {'User-Agent': '*******'}
req_login = urllib2.Request(url=login_url, headers=headers)
# 使用opener模擬登錄網頁,並把cookie保存到變量
response = opener.open(req_login, post_data)    # data要在open的時候傳上去
# 保存cookie到本地文件
cookie.save(ignore_discard=True, ignore_expires=True)
# 利用cookie進去需要抓信息的網頁
grade_url = '******'
# 請求訪問該網址
grade_response = opener.open(grade_url)
print grade_response.read().decode('gbk')

# 用request試試
s = requests.session()
login_url = '*****'
headers = {'******'}
# 模擬發送登錄請求
login = s.post(login_url, data=user_data, headers=headers)
print login.content
# 訪問成績頁面
grade_url = '******'
response = s.get(grade_url, cookies=login.cookies, headers=headers)
print response.content

不得不說,request真的是write for human!!!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章