扇贝简易爬虫
2017-03-04 本文已影响284人
cijianzy
前段时间因为编译时间过长的问题很是苦恼,玩微信刷微博吧又怕被老板看到而且影响工作,所以准备自己写个爬虫抓取扇贝在背的单词再加桌面提醒好好利用编译这段时间。
这是最终的形态:
屏幕快照 2017-03-04 下午9.53.40.png提醒这里用的是 Growl(收费) 的命令行版本 GrowlNotify.
其实写这个爬虫并不难,主要分为以下两个小步骤:
- 登录
- Cookie 保存
- 获取数据
登录
登录的接口,我们可以借助 Chrome 的开发者工具,我们模拟 扇贝 登录后, 可以在开发者工具中的 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 保存起来以便后续访问呢。
这里在访问前使用如下方法来保存:
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
urllib2.install_opener(opener)
获取数据
这一步取决于你想获取的数据,可以用上面找登陆接口方法模拟访问一遍找到数据接口即可。我这里找的是在学
的接口。接口地址如下:
https://www.shanbay.com/api/v1/bdc/library/familiar/?page={页数}&_={用户id}
可以看到,我这里枚举页数即可拿到所有在学的单词了,返回的是 JSON 字符串也比较方便解析。返回示例