百詞斬是一款很不錯的單詞記憶APP,在學習過程中,它會記錄你所學的每個單詞及你答錯的次數,通過此列表可以很方便地找到自己在記憶哪些單詞時總是反復出錯記不住。我們來用Python來爬取這些信息,同時學習Python爬蟲基礎。
首先來到百詞斬網站:http://www.baicizhan.com/login
這個網站是需要登錄的,不過還好沒驗證碼,我們可以先看下在登錄過程中瀏覽器POST了哪些數據。打開瀏覽器開發工具(F12),以Chrome瀏覽器為例,記錄登錄過程中瀏覽器的Network情況:
我們可以發現,在登錄過程中,瀏覽器向http://www.baicizhan.com/login以POST方式提交了數據。提交了什么數據呢?我們可以在下面的Form Data里看到。
其中,email是用戶名,raw_pwd就是密碼,這里的數據是需要經過URL編碼的,我們可以點view URL encoded查看編碼后的樣子。URL編碼需要urllib庫。
在請求頭(Request Headers)部分,我們還看到了Cookie。因此,我們還需要cookie庫,來處理我們的Cookie。
1 import urllib 2 import urllib2 3 import cookielib 4 5 email = 'your_email' 6 pwd = 'your_password' 7 data = {'email':email,'raw_pwd':pwd} 8 post_data = urllib.urlencode(data) 9 10 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar())) 11 12 response = opener.open('http://www.baicizhan.com/login', post_data) 13 print(response.read())
這樣,我們可以發現,打印的是登錄后的頁面源碼,這說明我們成功實現了登錄。
接着,我們來分析下單詞列表的頁面:http://www.baicizhan.com/user/words/list
當我們點擊頁碼時,實際上是發送了GET請求。然后我們看Response,發現是個json,我們解析下看看(可以到http://www.json.cn/在線解析json)
如果要在Python中解析json,我們需要json庫。我們打印下前兩頁的單詞看看:
1 import urllib2 2 import cookielib 3 import urllib 4 import json 5 6 email = 'your_email' 7 pwd = 'your_password' 8 data = {'email':email,'raw_pwd':pwd} 9 post_data = urllib.urlencode(data) 10 11 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar())) 12 13 opener.open('http://www.baicizhan.com/login', post_data) 14 15 for i in range(1, 3): 16 content = json.loads(opener.open("http://www.baicizhan.com/user/all_done_words_list?page=%s"%i).read()) 17 for word in content["list"]: 18 print word["word"] 19 print word["word_meaning"].strip() 20 print word["wrong_times"]
這樣,我們就能打印出前兩頁的單詞以及釋義、錯誤次數。
至於要把所有已學單詞都獲取到,只需要稍作修改即可,之后我們便能把這些數據存儲進行一些后續的處理。