程式設計雜筆

[程設雜筆] python爬蟲初試啼聲——登入取得cookie,並爬到資料

利用準備段考的空檔時間,練習寫寫看網路爬蟲,順便完成最近想完成的一件事。使用的語法是python。這是本部落格第一篇python技術文,灑花:)

會學python,其實是因為人工智慧課所學的,真的是一兼二顧,摸蛤仔兼洗褲。恰好我也想當一名業餘的資料科學家,而爬蟲是基本的技能,就花了點時間試試看。

其實之前就有寫過一次爬蟲,是用nodejs寫的,不過因為library太不齊全,雖然有成功,但寫起來很廢事。這次直接拿出技能樹中最新的python去寫,真的是好用到炸啊。

要會網路爬蟲,不只是要會python(當然也可以用其它語言去爬啦,但python是最好用的),也要會網路前後端的很多知識,不過如果有這些先備知識,要上手易如反掌,從開始到結束,只花了我幾個小時,就從無到有了。假如沒這些了解的話,那貿然進爬蟲,我覺得可能會有一些痛苦。不過,多花個一些時間查就可以了解了,也無妨。

廢話不多說,直接上code。

這個流程是要先到登入頁面去,送出帳密後,取得cookie,然後去拿到登入後才能拿到的資料。先到login頁面去,取得xsrf-token,然後設定好後,再post資料到/api/login這裡去,真正驗證登入。驗證完後,就暢行無阻啦!


import urllib, urllib2, cookielib
import json

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

token = opener.open('https://xxx.xxx.xx/login').info().getheader('set-cookie')[11:47]
login_data = urllib.urlencode({
'user' : 'xxx',
'password' : 'xxx'})
opener.addheaders.append(('x-xsrf-token', token))
response = opener.open('https://xxx.xxx.xx/api/login', login_data)
resp = opener.open('https://xxx.xxx.xx')
chat = json.loads(resp.read(), 'utf-8')
廣告

9 thoughts on “[程設雜筆] python爬蟲初試啼聲——登入取得cookie,並爬到資料

  1. 你好,最近因為學習Python而有幸到此部落格,目前是資管系的學生,不過技術底很弱,想趁暑假好好精進,我在udacity cs101這堂課粗淺地學到了如何利用Python寫一個很基本的搜尋引擎,但是因為他有教我才了解,也拜讀了你的"寫網頁",很難嗎",但是目前迷茫中..,不曉得該做什麼作品才能像你一樣有機會到竹科打工(舉例),不曉得是不是可以尋求你的建議,謝謝。

    Liked by 1 person

    1. 嗨你好,先謝謝你讀我的文章:)

      關於你的問題,如果現在有人請我寫一個簡單的搜尋引擎,我也不會寫
      但是在查完資料後,應當要能構建出簡單的搜尋引擎
      意即不會就查,任何高手遇到不會的也都是查

      我覺得迷茫是很正常的
      一年前我什麼都不會,直接跳進寫網頁
      其間我也想過要做出什麼樣的作品,才能獲得青睞,隔年的暑假才能去實習
      到今年暑假,我沒有做出什麼大作品,但我被reject的原因,不是因為實力不夠,而是因為在校成績

      熱情很重要,想一個自己會喜歡的東西,持續的精進和改進,就會進步,幅度連你自己都會嚇到
      就算一開始只是做個簡單的鬧鐘,你也可以再給它加上動畫,加上游戲,什麼都可以,你會更喜歡,更覺得酷,更有成就感
      在改進的過程,就會學更多東西,這邊撿一點,那邊撿一點
      最後,我覺得不用想著一開始就要去哪裡,因為當你厲害之後,想去哪裡就可以去哪裡

      祝你幸運:)

      喜歡

  2. 你好 我想請問您是怎麼知道自己有登入成功呢?
    我也剛試網路 剛試python
    爬了很多文之後都是類似的方式去登入
    可是我印出的結果都是要登入的那頁的原始碼(需要帳密的那頁)
    這樣就代表我沒有成功登入是嗎?
    成功登入的話拿到的網頁原始碼應該就是瀏覽器登入後的那一頁吧?

    不知道我這樣想對不對
    再麻煩您的回覆了😭謝謝您的分享

    Liked by 1 person

    1. 沒錯喔,如果正確登入的話,的確是會拿到登入頁面。
      但是呢,根據後台寫法和程式碼的不同,傳回來的頁面可能會不太一樣。
      有可能回傳回來的頁面是已經嵌入你登入後的帳戶資料,但也有可能沒有。
      如果是後者的話,那這個網頁很可能用 script 的程式碼,再 ajax 去後台拿一次資料。
      寫網路爬蟲比較麻煩的點就是你要觀察他,根據不同的網站,用最適當的方法去拿到你想要的資料。
      如果你本身有寫網站的話,那你可能會比較懂我上面在講什麼喔
      加油!

      喜歡

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s