查看原文
其他

学好这一手,英语词典常在手

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:王   彤,中南财经政法大学统计与数学学院

本文编辑:张孟晗

技术总编:陈   鼎

Stata&Python云端课程来啦!

为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~原价2400元的Python编程培训课程,现在仅需100元,详情请查看推文《Python云端课程福利大放送!0基础也能学~》。关于Stata,爬虫俱乐部推出了系列课程,内容包括字符串函数、正则表达式、爬虫专题和文本分析,可以随心搭配,价格美丽,物超所值,更多信息可查看Stata系列推文《与春天有个约会,爬虫俱乐部重磅推出正则表达式网络课程!》《与春天有个约会,爬虫俱乐部重磅推出基本字符串函数网络课程》等。变的是价格,不变的是课程质量和答疑服务。对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦

导读

不知道大家平时查询英语单词时主要使用什么网站啊,有道,谷歌还是百度?这几个网站因为简洁的页面、快捷的查询深受大众喜欢。今天作者主要介绍一段程序达到爬取有道翻译实现用户输入单词自动翻译的效果。


网站介绍

首先我们打开网址https://fanyi.youdao.com/就会看到以下的界面。

我们会看到界面的主要组成部分:一是输入框,主要是用于用户输入;检测窗格可以实现自动检测用户输入属于什么语言,当然也可以手动选择,翻译窗格是设计用户点击翻译开始按钮;最后是输出框展示最终翻译的结果。

网站解析

点击F12键,打开开发者模式,在输入框输入想要翻译的单词,伴随结果的展示,我们发现网站实现异步加载,结果保存在单独一个文件。

预览可以看到输入的内容以及想要的结果,点击Headers,我们可以看到文件的详细信息,包括结果所在的URL地址以及请求方式,当然还有请求头和表单参数等信息。

post请求方式区别于get请求,简单理解,其网站访问需要给到服务器一个或几个参数,后台服务器才会返回信息经过网站展示给用户。
请求头在以前多篇推文中已经介绍过,接下来我们主要关注一下表单信息(主要是变化的参数,说明在翻译时需要传递不同的参数以达到期望的效果)。

经过多次翻译测试,我们发现,i参数主要是输入的翻译内容,from参数是输入内容的语言,AUTO说明是自动检测,to参数是输出内容的语言,也可以是AUTO,但默认是输出汉语,当然输入汉语时默认输出英语。接下来,我们看salt参数和lts参数,因为它们都是数字,而且长的比较“像”,经过对JS代码进行断点测试,我们发现,两者其实是时间戳,可以理解为一个是输入的时间,一个是翻译输出的时间。最后是sign参数,经过调试发现是一段字符串经过MD5加密后形成,这一字符串主要与i参数与salt参数有关,其他的都是固定字符串。需要输入的参数我们已经分析出,接下来就是写程序锁定各参数对网站发起请求爬取结果。

网站爬取

参数解析:输入内容可以使用Python自带的input函数实现用户与程序之间的“互动”,时间戳可以使用time模块下的time函数生成当前的时间戳,sign参数可以将字符串进行拼接后使用hashlib模块下的md5函数对字符串进行加密更新。将参数生成过程写成一个函数。

def get_para(word): lts = str(int(time.time()*1000)) salt = lts + str(random.randint(0,9)) string = "fanyideskweb" + word + salt + "]BjuETDhU)zqSxf-=B#7m" s = md5() s.update(string.encode()) sign = s.hexdigest()
    return salt,lts,sign

python实现:接下来,使用input函数生成最后一个参数,最后发起请求进行网站爬取,并将翻译结果解析提取出来展示。

def youdao_trans(word): salt,lts,sign = get_para(word) url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule' headers = { 'Accept': 'application/json, text/javascript, */*; q=0.01',        'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Connection': 'keep-alive', 'Content-Length': '239', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Cookie': '_ntes_nnid=30737162cbed63a777b34bd38411ddb0,1601626880580; OUTFOX_SEARCH_USER_ID_NCOO=1891586414.1360977; OUTFOX_SEARCH_USER_ID=-1926924795@10.108.160.137; JSESSIONID=aaannAHFJzp4xazZlPEvx; ___rl__test__cookies=1603613950996', 'Host': 'fanyi.youdao.com', 'Origin': 'http://fanyi.youdao.com', 'Referer': 'http://fanyi.youdao.com/?keyfrom=fanyi-new.logo', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', 'X-Requested-With': 'XMLHttpRequest' }
data = { 'i': word, 'from': 'AUTO', 'to': 'AUTO', 'smartresult': 'dict', 'client': 'fanyideskweb', 'salt': salt, 'sign': sign, 'lts': lts, 'bv': 'e915c77f633538e8cf44c657fe201ebb', 'doctype': 'json', 'version': '2.1', 'keyfrom': 'fanyi.web', 'action': 'FY_BY_REALTlME' }
html = requests.post( url = url, data = data, headers = headers ).json()
    return html['translateResult'][0][0]['tgt']


我们传入一个词查看一下结果:


结果展示

我们发现,虽然结果生成了,但是可观察性并不是很好,接下来是否可以优化一下我们的“产品”,生成一个类似有道翻译网站这种可交互性的界面。我们使用Python 自带的Tkinter库实现。Tkinter作为一个图形开发界面库,是 Python 的标准 Tk GUI 工具包的接口 。
最后,我们生成了如下的结果图:


以上就是本次文章的全部内容,大家赶快动手尝试一下吧!













最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。




对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!

往期推文推荐

        玩转Stata中的数学函数

         用spmap看中国空气质量

戳穿围城面具:安利&劝退一个专业

走进图文并茂的攻略世界 

玩转word文档“大变身”——wordconvert

数据读入|一文读懂用Stata读入不同类型的数据

简述递归

OpenCV库——轻松更换证件照背景色

800万年薪!还有谁?!

千古伤心词人,词伤几何?

去哪儿网攻略爬取——跟我一起去大理吧

"有你才有团"——Stata爬取王者荣耀英雄海报

爬虫实战|嚣张的徽州宴老板娘错在哪?

如何获取衡量股民情绪的指标?|东方财富股吧标题爬虫

利用Python构建马科维茨有效边界

rangestat,让统计量灵活滚动起来!

听说这样做立项成功率更高哦

如何处理缺失值?这一篇搞定!

善用dataex命令,高效沟通你我他

用Markdown制作简历,强力助力你的求职季

大数据下的大学分数线排行榜,快来围观!

《觉醒年代》—带你回到百年前

用Stata画的三维图很奇怪怎么办?

如何随机生成满足特定数据特征的新变量?

爬取无法翻页网页——自然科学基金项目及可视化

爬取京东评论数据进行情感分类

Stata与音乐之间的酷炫连接

这些年,爬虫俱乐部走出的博士们!
看这里,近五年各校高被引论文上榜名单!

高校经管类核心期刊发文排行榜

疯狂的科研创新加速器——Stata!

关于我们 


微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存