前段時間因為編譯時間過長的問題很是苦惱,玩微信刷微博吧又怕被老板看到而且影響工作,所以準備自己寫個爬蟲抓取扇貝在背的單詞再加桌面提醒好好利用編譯這段時間。
這是最終的形態(tài):
屏幕快照 2017-03-04 下午9.53.40.png
提醒這里用的是 Growl(收費) 的命令行版本 GrowlNotify.
其實寫這個爬蟲并不難,主要分為以下兩個小步驟:
- 登錄
- Cookie 保存
- 獲取數據
登錄
登錄的接口,我們可以借助 Chrome 的開發(fā)者工具,我們模擬 扇貝 登錄后, 可以在開發(fā)者工具中的 Network 中看到 登錄的網絡請求,注意這里需要點擊`Preserve log' 保留日志。
粘貼圖片.png
在這里我們可以觀察到訪問的接口是:https://www.shanbay.com/api/v1/account/login/web/
并在過程中傳輸了用戶名密碼。我們模擬這個提交就可以模擬登陸了。
data = {'username': 'cijianzy@gmail.com', 'password': '******'}
request = urllib2.Request('https://www.shanbay.com/api/v1/account/login/web/', urllib.urlencode(data))
request.get_method = lambda: 'PUT'
response = urllib2.urlopen(request)
<b>登陸成功后的結果</b>
{"msg": "SUCCESS", "status_code": 0, "data": {}}
登陸就大功告成了
Cookie 保存
那么登陸后我們需要將 Cookie 保存起來以便后續(xù)訪問呢。
這里在訪問前使用如下方法來保存:
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
urllib2.install_opener(opener)
獲取數據
這一步取決于你想獲取的數據,可以用上面找登陸接口方法模擬訪問一遍找到數據接口即可。我這里找的是在學
的接口。接口地址如下:
https://www.shanbay.com/api/v1/bdc/library/familiar/?page={頁數}&_={用戶id}
可以看到,我這里枚舉頁數即可拿到所有在學的單詞了,返回的是 JSON 字符串也比較方便解析。返回示例