利用Python制作查单词小程序(一):抓取来自百度翻译的单词释义和音标

小编在学习英语的时候,遇到不认识的英语单词,会用百度翻译来查询单词的释义和音标,并播放单词的读音。为了便于复习和记忆,需要将单词的释义和音标以复制粘贴的方式保存到本地。

这个过程非常繁琐,于是小编就想能否利用Python写一个爬虫小程序,来自动完成这些工作呢?

为了完成这样一个小程序,我们需要完成以下几个步骤:

1.输入单词,查询单词的释义和音标

2.下载音频并播放读音

3.保存到本地Excel文件中,并自动调整格式

4.打包成可执行的exe程序

在本篇文章中,我们将讲解如何完成第一个步骤:输入单词,查询单词的释义和音标。

1

打开百度翻译,确定需要抓取的信息

打开以后,我们输入单词“Python”,点击网页中的“翻译”按钮进行查询,出现如下图所示内容。用红框框出的单词释义和音标,是我们需要抓取的信息。

同时,我们想要单词的释义和音标在Excel中以下图所示的结构保存。

2

利用开发者工具(DevTools)进行抓包分析

以Chrome浏览器为例,我们可以通过以下方式打开开发者工具:

1. 在网页空白处点击右键,然后左键点击“检查”

2. Ctrl + Shift + I

3. F12

打开以后,点击“Network”选项,如下图所示:

根据提示,我们按“F5”刷新网页,网页重新加载,在“Network”面板中,可以看到从服务器发送过来的数据,包括HTML文件、JS文件、图片等。

我们点击“logo_cbfea26.png”,再点击“Preview”,会出现百度翻译的图片,也就是网页左上角的Logo。

这些从百度翻译所在服务器传递过来的数据和文件经过浏览器处理和渲染,最终呈现出我们在浏览器里看到的网页界面。

3

找到目标URL,发送请求

我们的目标是找到从服务器传递过来包含单词释义和音标内容的URL地址,然后利用Python去请求该URL地址,得到目标内容。

有些时候,从浏览器传输过来的数据太多太杂,我们无法快速找到目标内容。这是一个熟能生巧的过程,尝试次数多了,自然能够快速定位目标URL。

这里介绍小编常用的一个方法:

1. 点击开发者工具左上方的清理按钮,将原先所有的数据删除,然后点击网页中的“翻译”按钮,网页内容局部加载,在“Network”中会出现新传递过来的数据。

2. 传输过来的数据有多种类型,我们可以利用开发者工具中自带的筛选功能。一般目标内容在“XHR”或者“Doc”中,我们先点击“XHR”选项。具体操作如下图所示。

3. 我们点击“v2transapi”,然后点击“Preview”选项,可以看到具体的内容。我们依次点击:“direct_result” – “simple_means” – “symbols” – “0” – “parts” – “0” – “means”,这样我们就看到了单词释义以及音标。

5. 在“Request Headers”中会出现请求头信息,我们在请求网址的时候一定要带上这些信息,不然不会返回目标内容。

6. 在“Form Data”这一栏中,可以看到有一行是“query : Python”,说明我们要查询的单词是“Python”。所以我们要查询不同的单词只需要在这行更改就行了。

7. 代码如下(由于篇幅所限,省去一些不重要的代码,我们会附上完整代码):

4

加载JS代码得到sign

我们最终实现的目标是能够查询不同的单词。我们在查询其他单词时发现,sign会随着所查询单词的变化而变化。以查询“Python”和“python”为例,我们发现sign分别为“587387.791882”和“477811.239938”。

每一个单词都会对应一个sign,它是根据单词本身用JS代码生成的。这是一个反爬虫手段,如果没有sign,会有很多爬虫轻而易举地去抓取这些信息。我们需要从网页加载的JS代码中找出生成sign的那一段代码,这又是一个复杂而又困难的工作。好在网上已经有热心的网友将这段JS代码找到了,我们直接照搬下来就行。

我们用一个专门执行JS代码的模块“execjs”来生成sign,代码如下:

将两段代码合并,然后发送请求,得到如下数据。这是一段字符串,这其实是JSON格式的数据,我们可以用Python自带的模块“json”来进行处理。

5

处理JSON格式的数据

这里直接贴代码,代码如下。

打开“infos”这个列表,我们可以看到Python已经成功处理了那段字符串,并以“list”的形式存储单词释义和音标。

至此,我们利用Python成功完成了第一个步骤:输入单词,查询单词的释义和音标。

欢迎大家踊跃投稿,内容有关人文社会科学的即可,可以是学术前沿思想介绍、各种定量研究技术和方法介绍、各种软件(stata、Python、R语言,数据可视化等等)数据处理及分析技巧,可以是网络爬虫技巧,也可以是学术论文写作与发表等相关内容。

投稿要求:

1、务必原创、禁止抄袭;

2、务必准确、详细,有例子,有数据,有截图;

注意事项:

1、所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,我们会在推文里注明作者署名,并有稿酬提供

2、邮件请注明投稿,邮件名为“投稿+推文名称+作者+联系方式”;

以人文之情怀

以学术为志业

···········

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180302G1FK1C00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券