百词斩会记录你所学的每个单词及你答错的次数,通过此列表可以很方便地找到自己在记忆哪些单词时总是反复出错记不住。我们来用Python来爬取这些信息,同时学习Python爬虫基础。

首先来到百词斩网站,这个网站是需要登录的,不过还好没验证码,我们可以先看下在登录过程中浏览器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())

这样,我们可以发现,打印的是登录后的页面源码,这说明我们成功实现了登录。

接着,我们来分析下单词列表的页面:

当我们点击页码时,实际上是发送了GET请求。然后我们看Response,发现是个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"]

这样,我们就能打印出前两页的单词以及释义、错误次数。

至于要把所有已学单词都获取到,只需要稍作修改即可,之后我们便能把这些数据存储进行一些后续的处理。