日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

python 爬蟲如何正確的使用cookie

瀏覽:39日期:2022-07-07 09:10:04

很多時(shí)候,我們要查看的內(nèi)容必須要先登錄才能找到,比如知乎的回答,QQ空間的好友列表、微博上關(guān)注的人和粉絲等。要使用爬蟲直接登錄抓取這些信息時(shí),有一個(gè)不太好解決的難題,就是這些網(wǎng)站設(shè)置的登錄規(guī)則以及登錄時(shí)的驗(yàn)證碼識(shí)別。不過,我們可以想辦法繞過去,思路是這樣的:先使用瀏覽器登錄,從瀏覽器獲取登錄后的“憑證”,然后將這個(gè)“憑證”放到爬蟲里,模擬用戶的行為繼續(xù)抓取。這里,我們要獲取的憑證就是cookie信息。

這次我們嘗試使用python和cookie來抓取QQ空間上的好友列表。使用的工具是FireFox瀏覽器、FireBug和Python。

獲取cookie

打開FireFox瀏覽器,登錄QQ空間,啟動(dòng)FireBug,選擇FireBug中的Cookies頁簽,點(diǎn)擊頁簽中的cookies按鈕菜單,選擇“導(dǎo)出本站點(diǎn)的cookie”即可完成cookie的導(dǎo)出。

python 爬蟲如何正確的使用cookie

導(dǎo)出cookie會(huì)以一個(gè)名為cookies.txt文本文件形式存在。

程序?qū)崿F(xiàn)

然后我們會(huì)使用獲取的cookie新建一個(gè)opener來替換之前請(qǐng)求時(shí)使用的默認(rèn)的opener。將獲取的cookies拷貝到程序目錄下,編寫腳本如下:

#!python# encoding: utf-8from http.cookiejar import MozillaCookieJarfrom urllib.request import Request, build_opener, HTTPCookieProcessor DEFAULT_HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0'}DEFAULT_TIMEOUT = 360 def grab(url): cookie = MozillaCookieJar() cookie.load(’cookies.txt’, ignore_discard=True, ignore_expires=True) req = Request(url, headers=DEFAULT_HEADERS) opener = build_opener(HTTPCookieProcessor(cookie)) response = opener.open(req, timeout=DEFAULT_TIMEOUT) print(response.read().decode(’utf8’)) if __name__ == ’__main__’: grab(<a rel='external nofollow' >http://user.qzone.qq.com/QQ號(hào)/myhome/friends</a>)

因?yàn)槲覀兪褂玫氖荈ireFox瀏覽器導(dǎo)出的cookie文件,所以這里使用的cookieJar是MozillaCookieJar。

執(zhí)行腳本…然而報(bào)錯(cuò)了:

Traceback (most recent call last): File 'D:/pythonDevelop/spider/use_cookie.py', line 17, in <module> start() File 'D:/pythonDevelop/spider/use_cookie.py', line 9, in start cookie.load(’cookies.txt’, ignore_discard=True, ignore_expires=True) File 'D:Program Filespythonpython35libhttpcookiejar.py', line 1781, in load self._really_load(f, filename, ignore_discard, ignore_expires) File 'D:Program Filespythonpython35libhttpcookiejar.py', line 2004, in _really_load filename)http.cookiejar.LoadError: ’cookies.txt’ does not look like a Netscape format cookies file

問題出在cookies文件上,說是不像一個(gè)Netscape格式的cookie文件。不過也好解決,只需要在cookies文件開始一行添加如下內(nèi)容即可:

# Netscape HTTP Cookie File

通過這行內(nèi)容提示python cookie解析器這是一個(gè)FireFox瀏覽器適用的cookie。

再次執(zhí)行,還是會(huì)報(bào)錯(cuò),因?yàn)楸容^長我就只貼關(guān)鍵的部分出來:

http.cookiejar.LoadError: invalid Netscape format cookies file ’cookies.txt’: ’.qzone.qq.comtTRUEt/tFALSEtblablatdynamic’

意思是cookie中某些行存在格式錯(cuò)誤。具體錯(cuò)在哪兒,需要先了解下FireFox瀏覽器的cookie格式。MozillaCookieJar認(rèn)為每行cookie需要包含以下信息,每條信息以制表符分隔:

名稱 domain domain_specified path secure expires name value 類型 字符串 布爾型 字符串 布爾型 長整型 字符串 字符串 說明 域名 — 適用路徑 是否使用安全協(xié)議 過期時(shí)間 名稱 值

其中domain_specified是什么意思我不很清楚,以后弄明白了再補(bǔ)上。再來看看我們獲取的cookie的部分行:

user.qzone.qq.comFALSE/FALSE814849905_todaycount0user.qzone.qq.comFALSE/FALSE814849905_totalcount0.qzone.qq.comTRUE/FALSE1473955201LoadingYes.qzone.qq.comTRUE/FALSE1789265237QZ_FE_WEBP_SUPPORT0

前兩行格式是錯(cuò)誤的,后兩行格式是正確的。前兩行缺少“expires”屬性。該怎么辦呢——補(bǔ)上就好了唄。在其他的cookie中隨意選一個(gè)時(shí)間補(bǔ)上就OK了。

補(bǔ)全cookie后,再次執(zhí)行是正常的,沒有報(bào)錯(cuò)。但是沒有如預(yù)期的打印出好友信息,因?yàn)榫W(wǎng)址錯(cuò)了。使用firebug可以找出正確的網(wǎng)址:

https://h5.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/tfriend/friend_ship_manager.cgi?uin=QQ號(hào)&do=1&rd=0.44948123599838985&fupdate=1&clean=0&g_tk=515169388

這樣就抓取到好友列表了。好友列表是一個(gè)json字符串。

python 爬蟲如何正確的使用cookie

至于如何解析json,會(huì)在下一節(jié)進(jìn)行說明。

動(dòng)態(tài)獲取cookie

cookie是有過期時(shí)間的。如果想長時(shí)間抓取網(wǎng)頁,就需要每隔一段時(shí)間就更新一次cookie。如果都是從FireFox瀏覽器來手動(dòng)獲取顯得有些笨了。從瀏覽器獲取的cookie只是作為一個(gè)入口,之后再進(jìn)行請(qǐng)求還是要依靠python主動(dòng)獲取cookie。下面是一段獲取cookie的程序:

#!python# encoding: utf-8from http.cookiejar import CookieJarfrom urllib.request import Request, HTTPCookieProcessor, build_opener DEFAULT_HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0'}DEFAULT_TIMEOUT = 360 def get(url): cookie = CookieJar() handler = HTTPCookieProcessor(cookie) opener = build_opener(handler) req = Request(url, headers=DEFAULT_HEADERS) response = opener.open(req, timeout=DEFAULT_TIMEOUT) for item in cookie:print(item.name + ' = ' + item.value) response.close()

在示例程序中演示了如何獲取cookie,并打印了cookie的name和value兩項(xiàng)屬性。通過實(shí)例可以看到每次執(zhí)行http請(qǐng)求都會(huì)重新獲取cookie,因此可以將我們的程序調(diào)整一下:執(zhí)行第一次請(qǐng)求時(shí)使用我們通過瀏覽器獲取的cookie,之后的每次請(qǐng)求都可以使用上次請(qǐng)求時(shí)獲取的cookie。調(diào)整后的程序:

#!python# encoding: utf-8from http.cookiejar import MozillaCookieJar, CookieJarfrom urllib.request import Request, build_opener, HTTPCookieProcessor, urlopen DEFAULT_HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0'}DEFAULT_TIMEOUT = 360 def gen_login_cookie(): cookie = MozillaCookieJar() cookie.load(’cookies.txt’, ignore_discard=True, ignore_expires=True) return cookie def grab(cookie, url): req = Request(url, headers=DEFAULT_HEADERS) opener = build_opener(HTTPCookieProcessor(cookie)) response = opener.open(req, timeout=DEFAULT_TIMEOUT) print(response.read().decode('utf8')) response.close() def start(url1, url2): cookie = gen_login_cookie() grab(cookie, url1) grab(cookie, url2) if __name__ == ’__main__’: u1 = 'https://user.qzone.qq.com/QQ號(hào)/myhome/friends' u2 = 'https://h5.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/tfriend/friend_ship_manager.cgi?uin=QQ號(hào)&do=2&rd=0.44948123599838985&fupdate=1&clean=0&g_tk=515169388' start(u1, u2)

就這樣。

其他

其實(shí)在登錄QQ空間時(shí)使用cookie還有另一種法子——通過觀察,也可以在http 請(qǐng)求頭中添加cookie信息。

獲取請(qǐng)求頭中cookie的方式:打開FireFox瀏覽器,打開FireBug并激活FireBug的network頁簽,在FireFox瀏覽器上登錄QQ空間,然后在FireBug中找到登錄頁請(qǐng)求,然后就可以找到請(qǐng)求頭中的cookie信息了。

python 爬蟲如何正確的使用cookie

將cookie信息整理成一行,添加到請(qǐng)求頭中就可以直接訪問了。這個(gè)方法相對(duì)簡單,減少了修改cookie文件的步驟。

此外,在一篇博客文章中還找到了直接登錄QQ空間的方案。這算是已知最好的法子了,只要騰訊不改變登錄規(guī)則就能很簡單的執(zhí)行請(qǐng)求獲取cookie。不過年代久遠(yuǎn),不知規(guī)則是否還適用

以上就是python 爬蟲如何正確的使用cookie的詳細(xì)內(nèi)容,更多關(guān)于python 爬蟲使用cookie的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
肉色欧美久久久久久久免费看| 青青草精品视频| 色一区二区三区四区| 欧美国产极品| 色综合五月天| 久久婷婷一区| 波多野结衣一区| 亚洲女人av| 一区二区三区四区在线观看国产日韩| 视频在线观看91| 日韩精品一区二区三区中文| 日韩精品一二区| 亚洲一区网站| 日韩一区二区三区免费视频| 国产精品任我爽爆在线播放| 精品中国亚洲| 亚洲www啪成人一区二区| 91高清一区| 天堂va在线高清一区| 国产精品一级在线观看| 国产精品久久久久久久久妇女| 久久人人99| 蜜桃久久久久久| 免费日韩成人| 国产精品99一区二区| 亚洲欧美日韩国产一区二区| 日本一区二区三区视频在线看| 欧美亚洲tv| 国产精品麻豆久久| 伊人影院久久| 国产欧美丝祙| 神马久久午夜| 亚洲欧美视频| 国产极品模特精品一二| 久久精品青草| 日韩国产欧美三级| 91嫩草亚洲精品| 亚洲免费中文| 久久这里只有精品一区二区| 亚洲夜间福利| 欧美亚洲网站| 国产综合色区在线观看| 亚洲精品123区| 国产乱码精品一区二区三区亚洲人 | 国产亚洲激情| 国产区精品区| 亚洲欧美综合| 欧美日一区二区在线观看| 在线看片国产福利你懂的| 亚洲免费在线| 国产福利一区二区精品秒拍 | 国产va在线视频| 玖玖玖国产精品| 国产一区二区三区成人欧美日韩在线观看| 伊人影院久久| 精品国产欧美| 亚洲理论在线| 啪啪国产精品| 国产精品亚洲综合久久| 91精品观看| 麻豆一区二区99久久久久| 在线视频亚洲| 国内精品麻豆美女在线播放视频| 亚洲一区中文| 欧美国产三级| 日韩中文字幕一区二区三区| 久久精品福利| 一级欧美视频| 日本高清不卡一区二区三区视频| 91亚洲精品视频在线观看 | 久久视频精品| 蜜桃久久久久| 亚洲精品成a人ⅴ香蕉片| 91精品国产自产在线观看永久∴ | 香蕉精品久久| 欧美国产极品| 亚洲欧美网站在线观看| 久久久精品久久久久久96| 国产精品成人自拍| 亚洲一区二区小说| 亚洲高清久久| 四虎8848精品成人免费网站| 日韩不卡一区二区三区| 国产精品91一区二区三区| 欧美国产视频| 日韩激情一区二区| 亚洲一区观看| 欧美日韩水蜜桃| 日本一区二区高清不卡| 亚洲乱码久久| 久久99伊人| 欧美理论视频| 日韩中文影院| 日韩av在线播放网址| 国产福利资源一区| 国产亚洲精aa在线看| 亚洲精品一级| 在线日韩成人| 在线精品亚洲| 国产亚洲在线| 好吊视频一区二区三区四区| 久久激情中文| 日韩高清中文字幕一区二区| 久久精品免费看| 国产亚洲精品精品国产亚洲综合 | 国产精品久久久免费| 日韩免费精品| 亚洲精品一级二级三级| 免费日韩av片| 国产视频一区免费看| 99成人超碰| 99久久亚洲精品| 色婷婷久久久| 亚洲成人二区| 欧美美女一区| 国产精品婷婷| 美女黄网久久| 免费精品国产的网站免费观看| 日韩中文在线电影| 日本在线精品| 国产尤物精品| 激情欧美丁香| 国产亚洲精品v| 蜜桃久久av| 伊人久久亚洲| 日本三级亚洲精品| 日韩一区二区三区精品| 日韩激情av在线| 久久精品99久久久| 国产精品巨作av| 国产成人精品亚洲线观看 | 日本免费一区二区三区四区| 色偷偷偷在线视频播放| 欧美精品高清| 亚洲国产日韩欧美在线| 中文精品视频| 亚洲久久视频| 欧美日韩一区二区三区不卡视频| 97se亚洲| 美日韩一区二区三区| 成人一二三区| 亚洲高清不卡| 只有精品亚洲| 久久国产视频网| 国产在线日韩精品| 99久久精品费精品国产| 久久国产高清| 欧美亚洲专区| 国产91欧美| 亚洲精品在线观看91| 亚洲午夜免费| 欧美a在线观看| 日韩欧美一区二区三区在线观看 | 中文在线а√在线8| 国产精品av久久久久久麻豆网| 狠狠干成人综合网| 日韩精品午夜视频| 成人国产精品一区二区网站| 国产一区久久| 91在线成人| 麻豆视频在线看| 国产精品美女| 欧美三区不卡| 91精品国产乱码久久久久久久 | 国产免费播放一区二区| 麻豆mv在线观看| 午夜宅男久久久| 欧美日韩中文| 日韩欧美网址| 一区二区三区四区精品视频| 久久av影院| 欧洲激情综合| 国产精品主播在线观看| 在线成人动漫av| 国产三级精品三级在线观看国产| 成人美女视频| 亚洲精品成a人ⅴ香蕉片| 久久久久久久欧美精品| 久久av电影| 午夜久久影院| 国产乱码精品一区二区三区四区 | av亚洲在线观看| 国产乱码精品一区二区三区亚洲人| 在线天堂资源www在线污| 亚洲女人av| 成人国产精选| 日韩1区2区3区| 国产一在线精品一区在线观看| 国产图片一区| 最新国产拍偷乱拍精品| 久久97视频| 亚洲在线国产日韩欧美| 91亚洲自偷观看高清| 午夜久久av| 欧美精品羞羞答答| 久久中文字幕导航| 亚洲日本久久| 欧美福利在线| 日韩av在线播放网址| 日本不卡高清视频|