电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python 爬蟲如何正確的使用cookie

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

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

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

獲取cookie

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

python 爬蟲如何正確的使用cookie

導出cookie會以一個名為cookies.txt文本文件形式存在。

程序實現

然后我們會使用獲取的cookie新建一個opener來替換之前請求時使用的默認的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號/myhome/friends</a>)

因為我們使用的是FireFox瀏覽器導出的cookie文件,所以這里使用的cookieJar是MozillaCookieJar。

執行腳本…然而報錯了:

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文件上,說是不像一個Netscape格式的cookie文件。不過也好解決,只需要在cookies文件開始一行添加如下內容即可:

# Netscape HTTP Cookie File

通過這行內容提示python cookie解析器這是一個FireFox瀏覽器適用的cookie。

再次執行,還是會報錯,因為比較長我就只貼關鍵的部分出來:

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

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

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

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

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

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

補全cookie后,再次執行是正常的,沒有報錯。但是沒有如預期的打印出好友信息,因為網址錯了。使用firebug可以找出正確的網址:

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

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

python 爬蟲如何正確的使用cookie

至于如何解析json,會在下一節進行說明。

動態獲取cookie

cookie是有過期時間的。如果想長時間抓取網頁,就需要每隔一段時間就更新一次cookie。如果都是從FireFox瀏覽器來手動獲取顯得有些笨了。從瀏覽器獲取的cookie只是作為一個入口,之后再進行請求還是要依靠python主動獲取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兩項屬性。通過實例可以看到每次執行http請求都會重新獲取cookie,因此可以將我們的程序調整一下:執行第一次請求時使用我們通過瀏覽器獲取的cookie,之后的每次請求都可以使用上次請求時獲取的cookie。調整后的程序:

#!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號/myhome/friends' u2 = 'https://h5.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/tfriend/friend_ship_manager.cgi?uin=QQ號&do=2&rd=0.44948123599838985&fupdate=1&clean=0&g_tk=515169388' start(u1, u2)

就這樣。

其他

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

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

python 爬蟲如何正確的使用cookie

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

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

以上就是python 爬蟲如何正確的使用cookie的詳細內容,更多關于python 爬蟲使用cookie的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 3A别墅漆/3A环保漆_广东美涂士建材股份有限公司【官网】 | 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 沥青灌缝机_路面灌缝机_道路灌缝机_沥青灌缝机厂家_济宁萨奥机械有限公司 | 餐饮小吃技术培训-火锅串串香培训「何小胖培训」_成都点石成金[官网] | 无负压供水设备,消防稳压供水设备-淄博创辉供水设备有限公司 | 新密高铝耐火砖,轻质保温砖价格,浇注料厂家直销-郑州荣盛窑炉耐火材料有限公司 | 电镀整流器_微弧氧化电源_高频电解电源_微弧氧化设备厂家_深圳开瑞节能 | 小型玉石雕刻机_家用玉雕机_小型万能雕刻机_凡刻雕刻机官网 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 铝镁锰板厂家_进口钛锌板_铝镁锰波浪板_铝镁锰墙面板_铝镁锰屋面-杭州军晟金属建筑材料 | 厂房出租_厂房出售_产业园区招商_工业地产&nbsp;-&nbsp;中工招商网 | 深圳高新投三江工业消防解决方案提供厂家_服务商_园区智慧消防_储能消防解决方案服务商_高新投三江 | 双舌接地线-PC68数字式高阻计-ZC36|苏海百科 | 国际船舶网 - 船厂、船舶、造船、船舶设备、航运及海洋工程等相关行业综合信息平台 | 领袖户外_深度旅游、摄影旅游、小团慢旅行、驴友网 | 聚丙烯酰胺_厂家_价格-河南唐达净水材料有限公司 | 南溪在线-南溪招聘找工作、找房子、找对象,南溪综合生活信息门户! | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 筒瓦厂家-仿古瓦-寺庙-古建琉璃瓦-宜兴市古典园林建筑陶瓷厂有限公司 | 流水线电子称-钰恒-上下限报警电子秤-上海宿衡实业有限公司 | 爆破器材运输车|烟花爆竹运输车|1-9类危险品厢式运输车|湖北江南专用特种汽车有限公司 | 玻璃瓶厂家_酱菜瓶厂家_饮料瓶厂家_酒瓶厂家_玻璃杯厂家_徐州东明玻璃制品有限公司 | 冷藏车-东风吸污车-纯电动环卫车-污水净化车-应急特勤保障车-程力专汽厂家-程力专用汽车股份有限公司销售二十一分公司 | 杭州画室_十大画室_白墙画室_杭州美术培训_国美附中培训_附中考前培训_升学率高的画室_美术中考集训美术高考集训基地 | 湖南自考_湖南自学考试| 冷凝水循环试验箱-冷凝水试验箱-可编程高低温试验箱厂家-上海巨为(www.juweigroup.com) | CPSE安博会| led太阳能路灯厂家价格_风光互补庭院灯_农村市政工程路灯-中山华可路灯品牌 | 免费个人pos机申请办理-移动pos机刷卡-聚合收款码办理 | 米顿罗计量泵(科普)——韬铭机械 | 威实软件_软件定制开发_OA_OA办公系统_OA系统_办公自动化软件 | 福州时代广告制作装饰有限公司-福州广告公司广告牌制作,福州展厅文化墙广告设计, | 硫酸钡厂家_高光沉淀硫酸钡价格-河南钡丰化工有限公司 | 天津力值检测-天津管道检测-天津天诚工程检测技术有限公司 | 石油/泥浆/不锈钢防腐/砂泵/抽砂泵/砂砾泵/吸砂泵/压滤机泵 - 专业石油环保专用泵厂家 | 中图网(原中国图书网):网上书店,尾货特色书店,30万种特价书低至2折! | 大流量卧式砂磨机_强力分散机_双行星双动力混合机_同心双轴搅拌机-莱州市龙跃化工机械有限公司 | 高中学习网-高考生信息学习必备平台| 耐火浇注料-喷涂料-浇注料生产厂家_郑州市元领耐火材料有限公司 耐力板-PC阳光板-PC板-PC耐力板 - 嘉兴赢创实业有限公司 | 冷水机,风冷冷水机,水冷冷水机,螺杆冷水机专业制造商-上海祝松机械有限公司 |