All Projects → hellflame → youdao

hellflame / youdao

Licence: MIT license
有道词典网页爬虫

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to youdao

spider
🌟 powered by python3( simple learning of spider) 百度文库;网易云歌曲; 豆瓣电影; GitHub; 京东; QQ空间; 天气; vip解析助手; TED文本内容; wifi破解脚本; 必应图片设置为桌面等爬取
Stars: ✭ 124 (+463.64%)
Mutual labels:  spider
OpenYspider
千万级图片爬虫、视频爬虫 [开源版本] Image Spider
Stars: ✭ 122 (+454.55%)
Mutual labels:  spider
Spydan
A web spider for shodan.io without using the Developer API.
Stars: ✭ 30 (+36.36%)
Mutual labels:  spider
Scrapy IPProxyPool
免费 IP 代理池。Scrapy 爬虫框架插件
Stars: ✭ 100 (+354.55%)
Mutual labels:  spider
web-translate
支持pdf和web的双击划词翻译脚本,当前使用爱词霸公共api
Stars: ✭ 43 (+95.45%)
Mutual labels:  youdao
aliexscrape
Get Aliexpress product details in JSON
Stars: ✭ 80 (+263.64%)
Mutual labels:  spider
163Music
163music spider by scrapy.
Stars: ✭ 60 (+172.73%)
Mutual labels:  spider
benchmark-http
No description or website provided.
Stars: ✭ 15 (-31.82%)
Mutual labels:  spider
photo-spider-scrapy
10 photo website spiders, 10 个国外图库的 scrapy 爬虫代码
Stars: ✭ 17 (-22.73%)
Mutual labels:  spider
landchina-spider
项目已经过时!无法应用在改版后的网站上。
Stars: ✭ 13 (-40.91%)
Mutual labels:  spider
node-html-crawler
Simple for use node html crawler (spider) of site web pages
Stars: ✭ 30 (+36.36%)
Mutual labels:  spider
ChineseStarsRelationship
中国明星数据爬取。你甚至可以拿到互联网上所有的人之间的关系,接下来你可以自己发挥!基于这些数据,你可以完成更多有趣的事情。比如说社交网络分析,关系网络可视化,算法研究,和其他有意思的事情。Chinese star data crawling. You can even get all the people on the internet! Based on these data, you can do more interesting things. For example, social network analysis, relational network visualization, algorithm research, and other interesting things.
Stars: ✭ 26 (+18.18%)
Mutual labels:  spider
douban-movie
Get movie info from douban(豆瓣) and display in your terminal
Stars: ✭ 17 (-22.73%)
Mutual labels:  spider
elves
🎊 Design and implement of lightweight crawler framework.
Stars: ✭ 322 (+1363.64%)
Mutual labels:  spider
QQSpider
爬取QQ用户信息(qq号、昵称、生日、地址等基本信息)并做简要analysis。
Stars: ✭ 21 (-4.55%)
Mutual labels:  spider
wget-lua
Wget-AT is a modern Wget with Lua hooks, Zstandard (+dictionary) WARC compression and URL-agnostic deduplication.
Stars: ✭ 52 (+136.36%)
Mutual labels:  spider
OpenScraper
An open source webapp for scraping: towards a public service for webscraping
Stars: ✭ 80 (+263.64%)
Mutual labels:  spider
python-spider
python爬虫小项目【持续更新】【笔趣阁小说下载、Tweet数据抓取、天气查询、网易云音乐逆向、天天基金网查询、微博数据抓取(生成cookie)、有道翻译逆向、企查查免登陆爬虫、大众点评svg加密破解、B站用户爬虫、拉钩免登录爬虫、自如租房字体加密、知乎问答
Stars: ✭ 45 (+104.55%)
Mutual labels:  spider
learning spider
这其实是一份学习笔记。包括学习记录、爬虫练习平台(网站)、自制工具脚本
Stars: ✭ 54 (+145.45%)
Mutual labels:  spider
scrapy-distributed
A series of distributed components for Scrapy. Including RabbitMQ-based components, Kafka-based components, and RedisBloom-based components for Scrapy.
Stars: ✭ 38 (+72.73%)
Mutual labels:  spider

youdao

曾经通过有道翻译API进行终端单词,翻译查询,由于这个接口将于2017年年底关闭,故采用网页爬虫的形式进行

在连续写了很多公司代码之后,重新审视了一下项目代码,发现很多面向对象开发的范式要求都没有被很好的遵守,导致后期维护变的比较麻烦而难以理解,这种心情就像第一次发现测试开发有多重要的时候感觉一样。

该项目代码应该在较长时间内不会有大的更新 (如果有小的bug修复应该会及时更新,毕竟这也是自己常用的小工具),之后如果有较多时间,可能会考虑整体的重构,主要是

  1. python3 的兼容(这可能是一个漫长的过程)
  2. 终端命令行解析
  3. 测试用例

安装

$ sudo pip install youdaodict --upgrade

MacOS 中如果出现权限问题的话

$ pip install youdaodict --upgrade --user

# 仅为当前用户安装

可执行脚本将被安装在/Users/<username>/Library/Python/2.7/bin/,将此路径添加进环境变量PATH中即可,或者

$ echo export PATH=$PATH:/Users/<username>/Library/Python/2.7/bin/ > ~/.bash_profile

使用

终端调用:

帮助菜单

$ youdao
$ youdao -h
有道翻译终端程序

Usage:
  youdao <word | phrase | sentence> [args...] 参数后置,查询翻译或解释
  youdao [args...] <word | phrase | sentence> 参数前置,查询翻译或解释

  --basic,-b  基本释义
  --debug,-d  调试模式
  --trans,-t  直接翻译
  --comp,-cp  自动补全
  --all,-a  翻译+基本释义
  --version,-v  版本信息
  --web,-w  网络翻译
  --clean,-c  清除数据库
  --help,-h 显示帮助信息

输入youdao + 想要查询的内容即可

更多帮助信息
https://github.com/hellflame/youdao/blob/v4.2.0/README.md

基本查询

$ youdao whatever

终端输入youdao + 想要查询的单词句子即可进行三重查询,本地查询/个人服务器查询/有道网页查询,从三种查询中获取最快的响应。

基本释义 >>>
  [wɒt'evə]
  us. [wət'ɛvɚ]
  uk. [wɒt'evə]
  conj. 无论什么
  adj. 不管什么样的
  pron. 无论什么;诸如此类

网络释义

$ youdao whatever -w
$ youdao -w whatever
网络释义 >>>
  Whatever
    WHATEVER,  Whatever,  诸如此类,
  Whatever Works
    怎样都行,  总之得就得,  纽约遇到爱,
  Whatever Things
    MTV搞什麽,

在查询单词或前或后添加-w参数,即可获得网络释义结果

翻译查询

$ youdao whatever -t
$ youdao -t whatever

在目标单词或前或后添加-t参数,即可获取该单词的对应翻译

$ youdao linux is fine
翻译     >>>
  linux是好

如果直接跟句子的话,一般也只会得到翻译结果

由于有道翻译的结果基本不能接受,所以还是考虑更靠谱的Google翻译好了,在v4.0.0之后,爬虫抓取结果不会再涉及翻译结果,最多采用有道的相似结果

所有查询结果

$ youdao whatever -a
$ youdao -a whatever
基本释义 >>>
  [wɒt'evə]
  us. [wət'ɛvɚ]
  uk. [wɒt'evə]
  conj. 无论什么
  adj. 不管什么样的
  pron. 无论什么;诸如此类

网络释义 >>>
  Whatever
    WHATEVER,  Whatever,  诸如此类,
  Whatever Works
    怎样都行,  总之得就得,  纽约遇到爱,
  Whatever Things
    MTV搞什麽,

翻译     >>>
  无论

当有对应查询结果时,才会有对应显示,并不是所有查询都会有全部返回结果

当找不到查询的单词或句子时,将会提示没有这个单词或句子的结果

$ youdao hellflame

 (╯▔皿▔ )╯ hellflame ㄟ(▔皿▔ ㄟ)

v4.0.0之后可能会有相似结果出现

相关词语     >>>
  hotflame
  hotflame

  hellfire
  n.地狱之火;严酷的苦难

清除用户数据库

$ youdao -c

用户数据库所在位置~/.youdao.sqlite3.db,sqlite3

v4.0.7.2 之后支持删除给定数据库中单词的数据,通过以下命令删除:

$ youdao -c <query>

删除用户数据库并不会影响在线状态下的继续使用

API相关的功能在v4.0.0之后不存在

用户数据库中主要存储着用户给定的API key信息以及缓存的查询结果,缓存查询结果,可以加速下一次相同的查询,也可以在离线情况下使用

调试状态

$ youdao whatever -d
$ youdao -d whatever
{
  "errorCode": 0,
  "query": "whatever",
  "translation": [
    "\u65e0\u8bba"
  ],
  "basic": {
    "phonetic": "w\u0252t'ev\u0259",
    "us-phonetic": "w\u0259t'\u025bv\u025a",
    "explains": [
      "conj. \u65e0\u8bba\u4ec0\u4e48",
      "adj. \u4e0d\u7ba1\u4ec0\u4e48\u6837\u7684",
      "pron. \u65e0\u8bba\u4ec0\u4e48\uff1b\u8bf8\u5982\u6b64\u7c7b"
    ],
    "uk-phonetic": "w\u0252t'ev\u0259"
  },
  "web": [
    {
      "value": [
        "WHATEVER",
        "Whatever",
        "\u8bf8\u5982\u6b64\u7c7b"
      ],
      "key": "Whatever"
    },
    {
      "value": [
        "\u600e\u6837\u90fd\u884c",
        "\u603b\u4e4b\u5f97\u5c31\u5f97",
        "\u7ebd\u7ea6\u9047\u5230\u7231"
      ],
      "key": "Whatever Works"
    },
    {
      "value": [
        "MTV\u641e\u4ec0\u9ebd"
      ],
      "key": "Whatever Things"
    }
  ]
}

由于版本兼容问题考虑欠佳,在 v4.0.0 以后的版本调试信息会类似如下:

{
  "translate": [
    "adj. \u4e0d\u7ba1\u4ec0\u4e48\u6837\u7684",
    "pron. \u65e0\u8bba\u4ec0\u4e48\uff1b\u8bf8\u5982\u6b64\u7c7b",
    "conj. \u65e0\u8bba\u4ec0\u4e48"
  ],
  "web_translate": [
    "\u65e0\u8bba\u4ec0\u4e48",
    "\u8bf8\u5982\u6b64\u7c7b",
    "\u65e0\u6240\u8c13",
    "\u529b\u6240\u80fd\u53ca"
  ],
  "pronounces": [
    "\u82f1[w\u0252t'ev\u0259]",
    "\u7f8e[w\u0259t'\u025bv\u025a]"
  ]
}

如果出现怀疑查询结果与实际看到的输出不一致的情况的话,使用调试选项,输出从API获取的返回json输出,json未经过更易读的编码调整,如果真的需要的话,需要其他工具进行进一步转换

个人服务器

非必需

个人服务器的存在只是为了(可能的)进一步加速查询过程,如果没有这个服务器的话,程序依然可以正常运行,只是数据来源就只有本地存储和实时网页爬虫了。

服务器中的查询结果当然也是来自于爬虫,预想中是如果有很多人查询的话,相同的结果就会更快的得到响应,从而加速查询。所以如果某一个单词是第一次被请求的话,服务器就要先使用爬虫,然后再返回结果,如果没有网络原因的话,应该比本地的爬虫要慢一点。

$ service.youdao

该命令默认会在本地3697端口开启TCP服务

测试

$ telnet localhost 3697
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
linux
{"insert_time": 1499742022, "pronounces": ["\u82f1[\u02c8la\u026an\u028cks;\u02c8l\u026an\u028cks]", "\u7f8e[\u02c8l\u026an\u0259ks]"], "used": 6, "web_translate": ["\u64cd\u4f5c\u7cfb\u7edf", "\u6b63\u7248", "\u5e38\u7528\u547d\u4ee4", "\u9884\u88c5"], "translate": ["n. Linux\u64cd\u4f5c\u7cfb\u7edf\uff08\u4e00\u79cd\u7c7b\u4f3c\u4e8eUNIX\u7684\u8ba1\u7b97\u673a\u64cd\u4f5c\u7cfb\u7edf\uff09"]}
windows
{"insert_time": 1499742054, "pronounces": ["['w\u026andoz]"], "used": 1, "web_translate": ["\u7a97\u53e3\u64cd\u4f5c\u7cfb\u7edf", "\u8981\u6c42", "\u9700\u6c42", "\u7a97\u53e3"], "translate": ["n. \u5fae\u8f6f\u516c\u53f8\u751f\u4ea7\u7684\u201c\u89c6\u7a97\u201d\u64cd\u4f5c\u7cfb\u7edf"]}

服务不会主动断开连接,并且直接响应每一行输入,返回目标json

服务默认最高支持1024个连接,更多连接数会abort(实际最高连接数量可以自行修改)

作者可能在自己的服务器上开启这个端口访问,也可能不会!(现在看来是不会了=。=)

版本信息

$ youdao -v
$ youdao --version

bash自动补全

添加于v3.3.0版本

可以将输出的bash脚本输出到用户目录的 .bash_profile.bashrc 等文件

# 自动补全代码:
$ youdao -cp

# 输出到resource文件
# on Mac OS
$ youdao -cp >> ~/.bash_profile
# on Linux
$ youdao -cp >> ~/.bashrc

若要立即生效,执行如下命令:

$ source ~/.bash_profile

# or on Linux 
$ source ~/.bashrc

由于对bash补全不是很熟悉,不排除会出现补全过程出现问题=。=,并且只有bash补全,对于zsh等其他shell,支持情况不明。

开发历程

  • 1.1.4 ==> 添加新选项, -a --all 输出所有可选输出
  • 1.1.5 ==> 允许不使用引号查询空格隔开的句子
  • 1.1.6 ==> 修改json获取异常处理
  • 1.1.7 ==> 网络连接验证机制导致返回数据被强制重定向问题判断
  • 2.0.0 ==> 添加本地数据库缓存数据,离线可用
  • 2.0.1 ==> 放宽InstantDB版本限制
  • 2.0.2 ==> 修复mac os 中无法正确初始化数据库的错误
  • 3.1.0 ==> 使用SQLite3数据库进行本地存储,可离线查询
  • 3.1.2 ==> Bug修复,数据库清除可选
  • 3.2.0 ==> 手动处理参数获取
  • 3.2.1 ==> 精细错误码识别
  • 3.2.2 ==> 单词默认小写
  • 3.3.0 ==> bash自动补全
  • 4.0.0 ==> 取消API调用
  • 4.0.1 ==> 修复在无基本释义情况下的显示策略问题
  • 4.0.2 ==> 修复无效翻译的无效输出问题以及其他小问题
  • 4.0.3 ==> 修复爬虫翻译结果空格过多的问题
  • 4.0.4 ==> 捕获超时异常
  • 4.0.5 ==> 捕获强行终止异常
  • 4.0.6 ==> bug fix
  • 4.0.7 ==> 搞了好几个版本的异常捕获=。=真的是醉了,这应该算是最终版本了才对
  • 4.2.0 ==> 代码整理,终端入口不受影响,程序API发生变更,sqlite 防注入

项目主要目的在于简单方便的终端查询,虽然功能在越来越多,但是一般能够用到的还是只有查询这一个功能。主要也在于linux系统中没有找到方便的单词查询工具,而且本身只要调用接口的话,就什么都出来了,这使得整个项目变的很简单。项目的所有功能依据也都是来自于个人的需求

关于本地存储,使用SQLite3作为本地数据库,本想使用MongoDB或者MySQL的,但是并不是所有人都会安装这些数据库的样子,而且这样也会使得使用配置过程变得很麻烦,因为曾经还想着异步更新来着,后来发现这样的需求并不是很重要的样子,并且现在可以手动更新本地数据库,所以使用SQLite也可以满足实际需要

v4.0.0

从4.0.0版本开始,不再调用有道提供的API。

虽然官方给了另一个API,但是只有专为移动客户端准备的SDK,然而我也不想深入底层查看验证机制(用python来实现一套SDK),所以就用最简单的爬虫来完成了.

对于本地翻译工具的话,Mac自带的词典工具其实可以满足部分需求,至于词汇量嘛,,,

在线翻译工具的话, Google翻译 翻译结果还好吧。

PS. 由于对之前版本的兼容性考虑不是很多,之前版本的数据库中的查询结果可能会导致一些问题=。=,可能需要删除一下原始的数据库,执行 youdao -c 删除之前版本的数据库或者手动删除rm ~/.youdao.sqlite3.db

以上

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].