相信每一个开发做了一段时间的人都会知道英语对开发者的重要性,各种框架库的文档、更新日志、issue、各种变量命名。这些东西时效性都是很低的,如果只能一昧的等待别人汉化、更新,那永远都会被别人甩在后面, 更何况除了受众比较广的一些开源项目和优质文章,基本上是不会有汉化的。
正因为这些,不提高英语水平对一个有远大理想($)的coder的而言,绝对是万万不可的。
说到学英语,就少不了背单词,但是现在都是9012年了,不可能像让我们像高中的时候一样走到哪里都拿着个小本本吧。所以这段时间我也折腾了不少背单词的app,扇贝、百词斩、知米、沪江、网易背单词、天天背单词。都是非常优秀的软件,记忆曲线,定期复习等实用的功能大大提高了背单词的效率。
但是,问题又来了。每个单词软件的词库量都参差不齐,而且词库大都是服务在校生,各种考研人员。不过所幸有的单词软件支持用户自己上传词库, 下面是我用积分买的一些单词书
在这里再次感谢这些单词书的收集者?。
问题又双来了,这些词库都是在线词库,虽然买了单词书,但是只能在该平台用,平台包含很多不支持买断的vip功能,自己又想把这些单词书放到自己想要的单词软件去背。问题有了,自然也会解决办法,目前大部分背单词app都支持自己上传单词生成词库,词库一般都是下面这种格式
// 前端单词大全.txt 格式是txt,单词间用回车分开
primitive
undefined
null
object
global
array
value
那现在要做的就是怎么把这些单词数据从别人的官网上爬下来并转换成自己需要的格式了,现有技术栈里node正好适合用来做这个工作,虽然以前没写过爬虫,但是大概知道要做的就是请求目标网页、分析页面结构、取出需要的数据。知道要做什么,ok,查查资料上手~
这里顺便分享一下最后爬取到的文件,仅供学习使用。
代码
依赖
const axios = require('axios'); // 发起请求
const cheerio = require('cheerio'); // 类jq的node文档分析库
const fs = require('fs'); // 生成文件
html结构:
列表结构
因为单词分为多个章节,需要先获取到各个章节的列表指向的地址
内页结构
数据大于20条时会出现分页
先写一个函数用于获取列表、详情并写入到指定文件
async function getDatas() {
// 先调用获取目录的方法,对应函数在下方代码中
let res = await getListUrl