轉自:http://blog.csdn.net/shomy_liu/article/details/37658701
上一篇大致介紹了python爬取網頁的兩種簡單的情況;接著又學習了一下登入的情況;並實現了登入人人網
先大致總結一下登入的幾個步驟
1,添加Cookie配置
一般需要帳號密碼登陸的,直接網址或者模仿瀏覽器操作是無法進入的,一般的解決方案是用python的一個模組是cookielib,用來記住登入成功之後儲存到本地的cookie;
具體代碼看人人登入吧
2,添加登入需要提交的表單資訊
一般postdata的資訊為登陸的使用者名稱,密碼什麼的,還有許多其他的資訊,其餘的資料是否必要,需要測試一下; 查看這個就可以用httpfox 或者審查元素的nextwork裡面,當你點擊登入的時候,在審查元素的network裡面可以看到post 、get的資料資訊;這裡就可以按照我們需要的來拿;
下面是模仿登入人人網的代碼;代碼注釋挺細的。以便以後回憶~~ 由於對正則不太會,就沒有做爬取(正則後面在學QAQ)
[python] view plain copy # -*- coding: cp936 -*- #renren login #Filename: renren.py import urllib2,urllib,cookielib #設定cookie cookiejar= cookielib.CookieJar() cookie=urllib2.HTTPCookieProcessor(cookiejar) opener= urllib2.build_opener(cookie,urllib2.HTTPHandler()) urllib2.install_opener(opener) #帳號資訊 email=raw_input('輸入郵箱') password=raw_input('輸入密碼') domain='renren.com'#網域名稱 url='http://www.renren.com/PLogin.do'#可以通過審查元素得到 #httpfox抓取資料包資訊, 其中headers和domain 可有可無 postdata裡面很多元素;最主要的使用者名稱密碼 #d對付反爬蟲 headers={ 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0' } data={ 'email' : email, 'password' : password, 'domain': domain } #編碼data postdata = urllib.urlencode(data) #發起請求 req=urllib2.Request(url,postdata,headers) #擷取源碼 print urllib2.urlopen(req).read()
轉自:http://zipperary.com/2013/08/16/python-login/
我的部落格中曾經貼過幾個爬蟲程式的代碼,用來批量下載圖片非常方便。這樣的爬蟲實現起來比較簡單。而有些網站需要使用者登入之後才可以下載檔案,之前的方法就辦不到了。今天就說說用Python類比瀏覽器的登入過程,為之後的登入下載做好準備。
登入的情況,需要額外用到的一個模組是cookielib,用來記住登入成功之後儲存到本地的cookie,方便在網站的各個頁面之間穿越。
先上程式碼範例:
12345678910111213141516171819202122232425262728 |
#encoding=utf8import urllibimport urllib2import cookielib###登入頁的urllgurl = 'http://mlook.mobi/member/login'###用cookielib模組建立一個對象,再用urlllib2模組建立一個cookie的handlercookie = cookielib.CookieJar()cookie_handler = urllib2.HTTPCookieProcessor(cookie)###有些網站反爬蟲,這裡用headers把程式偽裝成瀏覽器hds = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36' } ###登入需要提交的表單pstdata = {'formhash':'', #填入formhash'person[login]':'', #填入網站的使用者名稱'person[password]':'', #填入網站密碼}dt = urllib.urlencode(pstdata) #表單資料編碼成url識別的格式req = urllib2.Request(url = lgurl,data = dt,headers = hds) #偽裝成瀏覽器,訪問該頁面,並POST表單資料,這裡並沒有實際訪問,只是建立了一個有該功能的對象opener = urllib2.build_opener(cookie_handler) #綁定handler,建立一個自訂的openerresponse = opener.open(req)#請求網頁,返回控制代碼page = response.read()#讀取並返回網頁內容print page #列印到終端顯示 |
說明一下:
我這裡就不提供使用者名稱密碼了。關於需要提交的表單資料,chrome使用者可以F12 -> Network -> 填好帳號密碼並登入 -> 在Network找到POST...,請看截圖。
點擊「login」進入下圖介面。
「From Data」裡面資料比較多,通常需要使用者名稱、密碼,其餘的資料是否必要,需要測試一下。對於這個網站,還需要「formhash」。
Linux下無編碼問題,win下如果出現編碼問題應該是終端對編碼的支援不到位。
登入成功之後,我們建立的cookie_handler會自動管理cookie,程式的後面如果需要訪問其他頁面,用opener開啟其url即可。
「User-Agent」同樣可以通過F12查看到。
更詳細更nice的說明請參考這裡
這篇部落格重點不在介紹原理,重點是記錄下這個簡單的代碼塊,其他需要登入的爬蟲仿寫就可以了。
這個程式的目的是批量下載mlook的電子書。現在遇到一個問題: