今天干活遇到一個事。有一些網站的一些操作非得要求你登陸才能做,比如新浪微博,你要隨便看看吧,不行,非得讓你登陸了才能看,再比如一些用戶操作,像更改自己的資料啦,個人的隱私啦巴拉巴拉的。想抓取這樣的url的話,就得一邊攜帶cookie一邊搞。
今天遇到的問題就是mediawiki的編輯文章這個操作,wiki默認是要求你登陸才能編輯。不過wiki是開源的,可以改源碼設置成不用非得登陸也可以編輯。最開始為了快點看到效果,就是改的源碼,記得是LocalSetting.php這個文件,里面有一堆鍵值對,是用戶權限的設置。都是布爾,很好搞。
后來又研究了一下urllib2是怎么攜帶cookie的:
下面干這么一件事:去知乎登陸,完了進到個人中心的編輯資料頁面。就這兩步
#encoding:utf-8 import urllib import urllib2 import cookielib #用來搞cookie的 #第一步:登陸知乎 #拿到一個cookie實例,用來保留cookie,具體怎么保留這個不用操心,一切給http handler(這里就是HTTPCookieProcessor)處理 cookie = cookiellib.CookieJar() #整一個opener出來,實際上不這么整的話,就像最普通的urllib2.urlopen(url)這樣,實際上也是用了一個默認的openrer,只不過今天在這里是明確指定了opener,因為要搞cookie么 #build_opener里面加了一個http handler用來處理所有http請求相關的東西,包括cookie的操作,這里為了搞cookie,所以用了這個cookieprocessor,里面放剛才的cookie實例 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) data = {"email":"xxx","password":"xxx"}
data=urllib.urlencode(data) request = urllib2.Request("http://www.zhihu.com/login", data) response = opener.open(request) #這個時候cookie已經被保存好了 print cookie #第二步:進入個人中心編輯頁面 #注意上面cookie已經保存好了,而且注意是用這個cookie創建了httpcookieprocessor,又用這個httphandler創建了opener,所以這個opener就跟cookie關聯上了,那么接下來進入個人中心就直接用這個opener就可以了 response2 = opener.open("http://www.zhihu.com/people/edit") #完事 謝謝
完事,洗香香去,完了俯卧撐,昨晚昨晚今天胸疼嗷嗷嗷嗷
