成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Python 從零開(kāi)始爬蟲(chóng)(九)——模擬登錄,cookie的使用

edgardeng / 2831人閱讀

摘要:所以只要得到登錄后的并必要時(shí)進(jìn)行更新,服務(wù)器就會(huì)認(rèn)定其為登錄狀態(tài)??纯慈思抑?,加密到連名字都沒(méi)有了,還混淆,如何下手綜上,適用于沒(méi)有加密的登錄或者加密算法比較簡(jiǎn)單并且不常更新的網(wǎng)站。遇上無(wú)解的加密算法要么手操拷貝,要么請(qǐng)大佬出場(chǎng)。

某些網(wǎng)站,登錄和沒(méi)登錄,用戶的權(quán)限是不一樣的,帳號(hào)登錄之后才能獲取更多的信息。更有甚者一上來(lái)就是登錄界面,不登錄就不給你進(jìn)去(如p站)。爬取目標(biāo)不用登錄固然是好,但需要時(shí)也沒(méi)辦法啊,這時(shí)如果還想爬取信息,就必須讓爬蟲(chóng)學(xué)會(huì)登錄。

Cookie

說(shuō)到這里就要介紹一下本文的小主角cookie了,簡(jiǎn)單的說(shuō),cookie是服務(wù)器安在客戶端的“監(jiān)視器”,記錄了包括登錄狀態(tài)在內(nèi)的所有信息,這些信息由服務(wù)器生成和解釋,服務(wù)器通過(guò)客戶端攜帶的cookie來(lái)識(shí)別用戶。cookie存在生命周期,短的關(guān)掉瀏覽器就失效,長(zhǎng)的能若干天免登陸,一旦失效就要重新獲取。所以只要得到登錄后的cookie并必要時(shí)進(jìn)行更新,服務(wù)器就會(huì)認(rèn)定其為登錄狀態(tài)。本文將介紹幾種主流方法來(lái)模擬登錄

注意:并不是說(shuō)學(xué)會(huì)這幾種方法你就完全掌握了模擬登錄,加密,驗(yàn)證系統(tǒng)也可能成為模擬登錄的頭號(hào)勁敵,如果查遍全網(wǎng)都沒(méi)得到滿意的答案,selenium大佬也被識(shí)別了,那估計(jì)是沒(méi)救了

從瀏覽器獲取

這是最簡(jiǎn)單也是最容易見(jiàn)效的方法,在瀏覽器上登錄并進(jìn)行足夠多操作后獲得便能得到足量的cookie,打開(kāi)F12捉包觀其headers即可

圖中上方的set-cookie是響應(yīng)cookie,也就是服務(wù)器要保存在客戶端的cookie;下方的cookie則是要提交給服務(wù)器的cookie,也是我們的目標(biāo),讓requests使用這個(gè)cookie有兩種方法,一是原封不動(dòng)把cookie字符串放入headers字典中提交,二是把cookie字符串變成字典再由cookies參數(shù)提交,轉(zhuǎn)換方法如下。

def cookie_to_dict(cookie):
    cookie_dict = {}
    items = cookie.split(";")
    for item in items:
        key = item.split("=")[0].replace(" ", "")
        value = item.split("=")[1]
        cookie_dict[key] = value
    return cookie_dict

這種直接獲取的方法缺點(diǎn)也很明顯,就是不能追蹤set-cookie并更新,原來(lái)的cookie一旦失效,就要從新手動(dòng)獲取

session維持

session名為“會(huì)話”,即多個(gè)請(qǐng)求的行為。requests庫(kù)提供了會(huì)話對(duì)象(requests.Session)讓使用者能跨請(qǐng)求保持某些參數(shù)如cookie,而且能自動(dòng)處理服務(wù)器發(fā)來(lái)的cookie,使得同一個(gè)會(huì)話中的請(qǐng)求都帶上最新的cookie,非常適合模擬登錄。使用上也非常簡(jiǎn)單,實(shí)例化后幾乎相當(dāng)于一個(gè)requests對(duì)象擁有g(shù)et,post等方法,text,cotent等屬性。為了方便下次登錄,還可以把第一次session登錄后的cookie通過(guò)cookiejar保存到本地供下次讀取免去登錄

import requests
import http.cookiejar as cj
r = requests.session()
r.cookies = cj.LWPCookieJar()  # 接入容器
r.get(url,headers=,cookie=) # 不過(guò)需要注意,就算使用了會(huì)話,方法級(jí)別的參數(shù)也不會(huì)被跨請(qǐng)求保持,此cookie只發(fā)送給該請(qǐng)求
print(r.text)
r.post(url,headers=,data=,)
#請(qǐng)求x N
r.cookies.save(filename="cookies.txt", ignore_discard=True, ignore_expires=True)  # 保存cookie到本地,忽略關(guān)閉瀏覽器丟失,忽略失效
r.close() # 對(duì)話支持with打開(kāi)以實(shí)現(xiàn)自動(dòng)close


"""#載入本地cookie
s = requests.session()
s.cookies = cj.LWPCookieJar(filename="cookies.txt")
s.cookies.load(filename="cookies.txt", ignore_discard=True)
"""

雖說(shuō)session使cookie管理變得一勞永逸,但登錄包中post參數(shù)的構(gòu)造可能是一個(gè)深坑,post的是帳號(hào)密碼明文那簡(jiǎn)單;蛋疼的是如果帳號(hào)密碼連同其他數(shù)據(jù)經(jīng)js加密成密文作為post數(shù)據(jù),那你就得從js中挑選并分析加密算法,還要用python實(shí)現(xiàn)(某些加了混淆的js像天書一樣)。如果無(wú)法破譯加密,requests登錄就是一張白紙,cookie就更不用談了,給你再牛逼的管理工具也沒(méi)用。同時(shí)對(duì)方程序員的勤奮程度也是一個(gè)考慮因素,別人經(jīng)常改算法,你也要從新看js改代碼。

-----------------------------看看人家知乎,加密到連名字都沒(méi)有了,js還混淆,如何下手?-------------------------------

綜上,session適用于沒(méi)有加密的登錄或者加密算法比較簡(jiǎn)單并且不常更新的網(wǎng)站。遇上無(wú)解的加密算法?要么手操拷貝cookie,要么請(qǐng)selenium大佬出場(chǎng)。

selenium大法

大佬雖然是慢了點(diǎn),但永遠(yuǎn)是你大佬。借助瀏覽器完備的js解析能力,你根本不用考慮它是如何加密的,只要輸入賬號(hào)密碼,最多再加個(gè)驗(yàn)證碼,瀏覽器直接運(yùn)行js把他們直接變成密文并post過(guò)去,完成登錄,就像我們平時(shí)操作那么簡(jiǎn)單。所以有一種巧妙的方法是先用selenium進(jìn)行模擬登錄,然后再提取cookie給session用免去session模擬登錄的過(guò)程(當(dāng)然也可以繼續(xù)selenium下去)。在代碼中,往往就是定位,點(diǎn)擊,定位,發(fā)送帳號(hào)密碼,Enter(或者定位點(diǎn)擊登錄鍵),等待一段時(shí)間讓cookie加載完后將其打包成RequestsCookieJar給session用就可以了。如對(duì)付知乎可以這樣做:

import requests
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.zhihu.com/")
# 不考慮驗(yàn)證碼的情況
driver.find_element_by_xpath("http://button[@data-za-detail-view-id="2278"]").click() #點(diǎn)擊登錄進(jìn)入登錄界面
driver.find_element_by_xpath("http://input[@name="username"]").send_keys("account") #發(fā)送帳號(hào)名
driver.find_element_by_xpath("http://input[@name="password"]").send_keys("password",Keys.ENTER) #發(fā)送密碼并回車
time.sleep(10) # 等待cookie加載完成
cookies = driver.get_cookies()
print(cookies)

s=requests.Session()
c = requests.cookies.RequestsCookieJar()
for item in cookies:
    c.set(item["name"],item["value"])
print(c)
s.cookies.update(c) # 載入cookie
#s.get()
#s.post()

"""
"""

但就算是大佬,也不是萬(wàn)能的,有些網(wǎng)站能識(shí)別人操作的瀏覽器和selenium操作的瀏覽器,使登錄受到拒絕,譬如用selenium模擬登錄網(wǎng)易云音樂(lè)就會(huì)提示登錄異常。如果不能對(duì)js進(jìn)行逆向工程分析出其識(shí)別算法,那只能放棄selenium走requests那條要分析加密的老路

后記

到系列第十篇文章,爬蟲(chóng)系列也將接近尾聲,最后的內(nèi)容是多線程,多進(jìn)程及協(xié)程的介紹及使用。至于scrapy應(yīng)該就不會(huì)講了,半年前剛?cè)肱老x(chóng)坑學(xué)的,學(xué)得淺,現(xiàn)在忘得差不多了,如今又被深度學(xué)習(xí)帶跑了,但不排除突然復(fù)活的可能。心急的小伙伴可以去觀摩大佬們的代碼自學(xué)。本人就去挖DeepLearning的坑了。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://hztianpu.com/yun/42093.html

相關(guān)文章

  • Python定向爬蟲(chóng),模擬新浪微博登錄!

    摘要:當(dāng)我們?cè)噲D從新浪微博抓取數(shù)據(jù)時(shí),我們會(huì)發(fā)現(xiàn)網(wǎng)頁(yè)上提示未登錄,無(wú)法查看其他用戶的信息。三模擬登錄下面將介紹使用獲取新浪微博,然后使用提交從而實(shí)現(xiàn)模擬登錄。 當(dāng)我們?cè)噲D從新浪微博抓取數(shù)據(jù)時(shí),我們會(huì)發(fā)現(xiàn)網(wǎng)頁(yè)上提示未登錄,無(wú)法查看其他用戶的信息。模擬登錄是定向爬蟲(chóng)制作中一個(gè)必須克服的問(wèn)題,只有這樣才能爬取到更多的內(nèi)容。 showImg(https://segmentfault.com/img/...

    isaced 評(píng)論0 收藏0
  • Python 從零開(kāi)始爬蟲(chóng)(一)——爬蟲(chóng)偽裝&反“反爬”

    摘要:總的來(lái)說(shuō)有兩種反爬策略,要么驗(yàn)證身份,把蟲(chóng)子踩死在門口要么在網(wǎng)站植入各種反爬機(jī)制,讓爬蟲(chóng)知難而退。本節(jié)內(nèi)容就著這兩種反爬策略提出一些對(duì)策。內(nèi)嵌反爬很靈活,沒(méi)有什么固定的代碼格式,要花時(shí)間去分析出來(lái)。 ??之前提到過(guò),有些網(wǎng)站是防爬蟲(chóng)的。其實(shí)事實(shí)是,凡是有一定規(guī)模的網(wǎng)站,大公司的網(wǎng)站,或是盈利性質(zhì)比較強(qiáng)的網(wǎng)站,都是有高級(jí)的防爬措施的??偟膩?lái)說(shuō)有兩種反爬策略,要么驗(yàn)證身份,把蟲(chóng)子踩死在門口...

    int64 評(píng)論0 收藏0
  • Python 從零開(kāi)始爬蟲(chóng)(零)——爬蟲(chóng)思路&requests模塊使用

    摘要:定制篩選器,對(duì)內(nèi)容進(jìn)行篩選重點(diǎn)。審查元素這是瀏覽器自帶的工具,提供抓包和檢查網(wǎng)頁(yè)源碼的功能,供使用者分析網(wǎng)頁(yè)。超時(shí)設(shè)置,如果服務(wù)器在指定秒數(shù)內(nèi)沒(méi)有應(yīng)答,拋出異常,用于避免無(wú)響應(yīng)連接,整形或浮點(diǎn)數(shù)。返回連接狀態(tài),正常。 前言 python 3.6 ?。?本爬蟲(chóng)系列是面對(duì)有Python語(yǔ)法基礎(chǔ)的讀者寫的,如果你沒(méi)學(xué)過(guò)python,emmmm.....也沒(méi)關(guān)系,你或許能從每篇文章中學(xué)到一些...

    YanceyOfficial 評(píng)論0 收藏0
  • 零基礎(chǔ)如何學(xué)爬蟲(chóng)技術(shù)

    摘要:楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲(chóng)技術(shù)以供學(xué)習(xí),。本文來(lái)源知乎作者路人甲鏈接楚江數(shù)據(jù)提供網(wǎng)站數(shù)據(jù)采集和爬蟲(chóng)軟件定制開(kāi)發(fā)服務(wù),服務(wù)范圍涵蓋社交網(wǎng)絡(luò)電子商務(wù)分類信息學(xué)術(shù)研究等。 楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲(chóng)技術(shù)以供學(xué)習(xí),http://www.chujiangdata.com。 第一:Python爬蟲(chóng)學(xué)習(xí)系列教程(來(lái)源于某博主:htt...

    KunMinX 評(píng)論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---25、requests:高級(jí)用法

    摘要:比如我們以知乎為例,直接利用來(lái)維持登錄狀態(tài)。測(cè)試后,發(fā)現(xiàn)同樣可以正常登錄知乎。上一篇文章網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)基本使用下一篇文章網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)正則表達(dá)式 上一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---24、requests:基本使用下一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---26、正則表達(dá)式 在前面一節(jié)我們了解了 Requests 的基本用法,如基本的 GET、POST 請(qǐng)求以及 Response...

    dingding199389 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<