嗨,今天第26天了,早上到臺北參賽現在才回到臺中要開始寫鐵人競賽,最近因為太忙了的關係,開始反思這陣子的忙碌是否有意義,有點厭煩這樣的日子,事情太多無法每件事情都兼顧,造成了雖然好像每件事都有輸出都可以完成,但品質卻沒辦法維持(暈倒)就像deadline越近code就長得越自由(?)一樣,不過只能當作是一種自我挑戰?雖然有種越級打怪的感覺有點吃力。
好了,說完今天在客運上的ㄇㄇ後就進入到今天的主題吧,昨天說明了驗證碼識別,今天要說明cookie
登入,因為並不是每次都能夠順利識別驗證碼,這時候就可以換另外一種方式爬取。
An HTTP cookie (web cookie, browser cookie) is a small piece of data that a server sends to the user's web browser. The browser may store it and send it back with the next request to the same server. Typically, it's used to tell if two requests came from the same browser — keeping a user logged-in, for example. It remembers stateful information for the stateless HTTP protocol.
HTTP cookie是一段由伺服器送給使用者瀏覽器的一小塊資料。
瀏覽器會儲存它並且在瀏覽器下一次發送要求的時候將它送回原本送來的伺服器。基本上,它是用來區分兩個要求是來自同一個瀏覽器 —以此去保持使用者的登入狀態。例如,它提供了保存狀態資訊的功能來幫助HTTP這個無法紀錄狀態的通訊協定。
以登入的應用為例,使用者登入一個網站時伺服器端會請求用戶輸入使用者帳號及密碼,用戶可以選「下次自動登入」如果勾選了,在使用者前一次登入時,伺服器就會傳送包含登入憑據的Cookie到使用者的硬碟或記憶體上,在之後登入只要Cookie尚未到期,瀏覽器會傳送該Cookie給伺服器作驗證憑據減少重複登入的輸入行為。
如果Scrapy
能夠直接使用瀏覽器中的cookie
發送HTTP
請求,就可以繞過傳送表單登入的步驟。
使用browsercookie
便可以取得Chrome
和Firefox
瀏覽器中的Cookie
,使用pip
安裝:
(option) 在開始之前,啟用virtualenv
source path/to/your/virtualenv/bin/activate
若沒有browsercookie
套件,可用pip
安裝:
pip3
則將pip
改成pip3
pip install browsercookie
好了之後就可以使用了!
import browsercookie
以之前的網站當範例(Quotes to Scrape),我們輸入帳號密碼:
登入後會看到這個小視窗跳出來:
儲存
後,就來寫程式碼看看能不能抓到cookie
:chrome_cookiejar = browsercookie.chrome()
for cookie in chrome_cookiejar:
print(cookie)
可以看到如下圖,會印出所有在chrome
瀏覽器的cookie
:
當然,它有一些缺點:
如果在同一台機器上使用多個瀏覽器,每個瀏覽器在不同的儲存位置儲存 Cookie,因此Cookie
並不能定位到一個具體的人,而是用戶,電腦和瀏覽器的組合。
如果用戶在取得了一個Cookie
後,點選了瀏覽器的"回退"按鍵,則瀏覽器的狀態和取得Cookie
的狀態就出現了不一致。例如,如果網站基於Cookie
技術實現了購物車的應用,當用戶添加了物品後點選了"回退"按鍵,購物車的物品狀態可能並沒有發生變化。
Cookies
在某種程度上說已經嚴重危及用戶的隱私和安全。其中的一種方法是:一些公司的高層人員為了某種目的存取了從未去過的網站,而這些網站包含了一種叫做網頁臭蟲的圖片,該圖片透明且只有一個像素大小,它們的作用是將所有存取過此頁面的電腦寫入Cookie
。電子商務網站將讀取這些Cookie
資訊,並尋找寫入這些Cookie
的網站,隨即傳送包含了針對這個網站的相關產品廣告的垃圾郵件給這些人員。
好的,那今天就先說明到這了,雖然才八點多但我要先來休息了(躺)