iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 26
0
AI & Data

Scrapy爬蟲與資料處理30天筆記系列 第 26

[Day 26] 瀏覽器上的Cookie

嗨,今天第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便可以取得ChromeFirefox瀏覽器中的Cookie,使用pip安裝:

  • (option) 在開始之前,啟用virtualenv

source path/to/your/virtualenv/bin/activate

若沒有browsercookie套件,可用pip安裝:

  • 若是pip3則將pip改成pip3
pip install browsercookie

好了之後就可以使用了!

import browsercookie
  • 以之前的網站當範例(Quotes to Scrape),我們輸入帳號密碼:
    Imgur

  • 登入後會看到這個小視窗跳出來:

Imgur

  • 儲存後,就來寫程式碼看看能不能抓到cookie
chrome_cookiejar = browsercookie.chrome()
for cookie in chrome_cookiejar:
    print(cookie)

可以看到如下圖,會印出所有在chrome瀏覽器的cookie

Imgur

當然,它有一些缺點:

  • 如果在同一台機器上使用多個瀏覽器,每個瀏覽器在不同的儲存位置儲存 Cookie,因此Cookie並不能定位到一個具體的人,而是用戶,電腦和瀏覽器的組合。

  • 如果用戶在取得了一個Cookie後,點選了瀏覽器的"回退"按鍵,則瀏覽器的狀態和取得Cookie的狀態就出現了不一致。例如,如果網站基於Cookie技術實現了購物車的應用,當用戶添加了物品後點選了"回退"按鍵,購物車的物品狀態可能並沒有發生變化。

  • Cookies在某種程度上說已經嚴重危及用戶的隱私和安全。其中的一種方法是:一些公司的高層人員為了某種目的存取了從未去過的網站,而這些網站包含了一種叫做網頁臭蟲的圖片,該圖片透明且只有一個像素大小,它們的作用是將所有存取過此頁面的電腦寫入Cookie。電子商務網站將讀取這些Cookie資訊,並尋找寫入這些Cookie的網站,隨即傳送包含了針對這個網站的相關產品廣告的垃圾郵件給這些人員。

好的,那今天就先說明到這了,雖然才八點多但我要先來休息了(躺)

Cookie - 維基百科,自由的百科全書


上一篇
[Day 25] OCR 圖片識別
下一篇
[Day 27] User-Agent 說明與使用
系列文
Scrapy爬蟲與資料處理30天筆記30

尚未有邦友留言

立即登入留言