有道生词本的批量处理
Roy Lv7

mark

近期有个需求是需要将自己的生词和“The Oxford 5000”批量导入有道词典的生词本。

批量添加生词

通过构造xml的方式来直接导入生词本,但是通过这种方式添加到生词本之后,单独查看生词本是没有发音和翻译的。我需要发音和翻译,以此用于打印和反复记忆。

通过web端的添加生词,进行抓包,使用请求来批量添加生词,需要传入格林威治标准时间。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def get_gmt_time():
GMT_FORMAT = '%a %b %d %Y %H:%M:%S GMT'
a = str(datetime.datetime.now().strftime(GMT_FORMAT)) + "0800 (中国标准时间)"
return a

def add_word(word):
gmt = get_gmt_time()
url = "http://dict.youdao.com/wordbook/ajax?action=addword&q="+ str(word) +"&date=" +str(gmt)+ "&le=eng"
headers = {
'Accept': '*/*',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
'Cookie': YOUR COOKIE HERE
}
response = requests.get(url, headers=headers)
print(response.text)

到这里已经可以批量添加生词了。

批量导出生词

如果需要将生词到处并进行打印,使用有道词典pc客户端导出生词的话,每次只能导出200个单词,无论你的分组里面有多少单词。

通过web端的有道单词本可以看到所有的生词,通过开发者模式开到有个接口是来限制每页显示生词数量的。

http://youdao.com/wordbook/webapi/words?limit=15&offset=0

直接修改limit的数量,接口返回的json数据便是我们想要的内容,数据是包含发音和翻译的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"code": 0,
"msg": "SUCCESS",
"data": {
"total": 4963,
"itemList": [
{
"itemId": "1c82fc32a3923d2a1f77b0dae96f48f7",
"bookId": "5ea3ec6b6c7f497d91796063366efeb0",
"bookName": "oxford5000",
"word": "AIDS",
"trans": "abbr. 获得性免疫缺乏综合征;艾滋病(Acquired Immune Deficiency Syndrome)",
"phonetic": "eɪdz",
"modifiedTime": 1598351070000
}....

直接对数据进行解析处理即可。

如果要进行打印,考虑到字体和分栏等问题,word调整了好久都无法达到满意效果,因为翻译的长度不是统一的,可以使用jinja2写个html简单渲染一下。或者放到excel中进行简单调整,即可达到我们想要的效果。

oxford

The Oxford 3000/5000 的单词爬取脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def get_word():
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'
}
url = 'https://www.oxfordlearnersdictionaries.com/wordlists/oxford3000-5000'
req = requests.get(url,headers=headers)
html = req.text
soup = BeautifulSoup(html,'lxml')
ul = soup.find('ul',class_="top-g")
for x in ul:
try:
word = x.select('li > a')
except Exception as e:
pass
else:
if word:
result.append(word[0].text)
result.sort()
res = set(result)
return res
  • 本文标题:有道生词本的批量处理
  • 本文作者:Roy
  • 创建时间:2020-08-27 09:58:21
  • 本文链接:https://www.yrzdm.com/2020/08/27/youdao-dict/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!