感觉挺好玩的,所以就转了,但我也做了定制化。

原文:

一.用Charles爬取数据(Windows用Fiddler也差不多)

Charles是一个多平台的抓包工具,可以很方便的抓取http和https数据。

1.抓取数据

抓取数据前我们首先要清楚,由于有道词典的翻译使用的是post请求,所以我们要抓取的信息有:url链接、request headers(请求头)、format data(数据表单,也即请求体request body)

a)打开Charles,选择Proxy选项卡中的macOS Proxy选项。

macOS Proxy

b)打开浏览器,输入网址 http://fanyi.youdao.com,然后在左边的输入框输入要翻译的内容。

有道

c)打开Charles,点击左边的Structure选项卡,依次点击找到箭头指示的内容,可以在右边的Overview选项卡中看到基本的请求信息,这里我们需要的url链接就出现了。

Charles

d)点击右边的content选项卡,再点击Raw选项卡,就可以看到原始的请求数据,红框所示是请求头信息,蓝框所示是请求体信息。

请求数据

整理数据

a)将找到url链接、请求头以及请求体数据复制到sublime编辑器中。

整理前

b)利用sublime的替换功能,将数据整理成我们写程序时想要的python中字典的形式。

整理后

二.代码实现

闲话不多说,先贴代码

import urllib.parse

import urllib.request

def youdao():

# 构建url链接

# url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'

# 这里要去掉?号前面的_o,不然会进行加密算法,导致失败

url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'

# 构建请求头

headers = {

"User-Agent" : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:59.0) Gecko/20100101 Firefox/59.0'

}

words = input("请输入要翻译的内容:")

# 构建请求体

format_data = {

'i': words,

'from':'AUTO',

'to':'AUTO',

'smartresult':'dict',

'client':'fanyideskweb',

'salt':'1526368137702',

'sign':'f0cd13ef1919531ec9a66516ceb261a5',

'doctype':'json',

'version':'2.1',

'keyfrom':'fanyi.web',

'action':'FY_BY_REALTIME',

'typoResult':'false'

}

# 进行url编码

format_data = urllib.parse.urlencode(format_data).encode("utf-8")

# 获取request文件(传入了data参数,就是post请求)

request = urllib.request.Request(url, data = format_data, headers = headers)

# 打开请求文件

response = urllib.request.urlopen(request)

# 读取文件内容

content = response.read()

content = eval(content)

ret = content["translateResult"][0][0]['tgt']

print(ret)

return ret

if __name__ == "__main__":

youdao()

运行结果:

运行结果

注意点:

1.如果使用原始的url进行爬取,会返回erro500的错误,我们需要将原始的请求url里面的"_o"去掉,这样服务器就不会进行验证。

2.代码对请求体进行了url编码后,还进行了二进制编码,因为http请求用的是二进制,所以要进行编码,才能发送post请求。

3.请求包体里面的'i',是我们用户输入的翻译内容,所以这是我们要自定义输入的地方。

三.图形界面

代码基本实现后,觉得有点无趣,就用python3自带的tkinter写了个小的图形界面出来,代码如下:

from tkinter import *

import urllib.parse

import urllib.request

def youdao(words):

# 构建url

url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'

# 构建请求头

headers = {

"User-Agent" : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:59.0) Gecko/20100101 Firefox/59.0'

}

# 构建请求体

format_data = {

'i': words,

'from':'AUTO',

'to':'AUTO',

'smartresult':'dict',

'client':'fanyideskweb',

'salt':'1526368137702',

'sign':'f0cd13ef1919531ec9a66516ceb261a5',

'doctype':'json',

'version':'2.1',

'keyfrom':'fanyi.web',

'action':'FY_BY_REALTIME',

'typoResult':'true'

}

# 进行url编码

format_data = urllib.parse.urlencode(format_data).encode("utf-8")

# 获取request文件(传入了data参数,就是post请求)

request = urllib.request.Request(url, data = format_data, headers = headers )

# 打开请求文件

response = urllib.request.urlopen(request)

# 读取文件内容

content = response.read()

content = eval(content)

ret = content["translateResult"][0][0]['tgt']

print(ret)

return ret

# 主程序

root = Tk()

# 设置标题

root.title("呆瓜词典")

# 设置主窗口大小

root.geometry("320x150")

# 可变大小

root.resizable(width=False, height=True)

# 第一排输入框 输入查询的内容

# 左边是一个标签

l1 = Label(root, text = '查询内容', bg = "yellow", font = (12), height = 1, width = 8)

l1.place(x = 20,y = 20)

var1 = StringVar()

input_text = Entry(root, textvariable = var1)

input_text.place(x = 100, y = 20)

# 第二排显示框 显示查询的结果

# 左边是一个标签

l2 = Label(root, text = '查询结果', bg = "yellow", font = (12), height = 1, width = 8)

l2.place(x = 20, y =60)

var2 = StringVar()

output_text = Entry(root, textvariable = var2)

output_text.place(x = 100, y =60)

# 调用youdao函数,传进要翻译的内容

def func():

words = var1.get()

if words:

# print(words)

result = youdao(words)

var2.set(result)

# 添加一个按钮

b = Button(root, text = "查询", command = func)

b.place(x = 170, y = 100)

# 运行主程序

root.mainloop()

运行效果:

示例1

示例2

中英文都可以翻译,至此任务就完成了。

撒花

---------------------------------我是华丽丽的分割线---------------------------------

我也跟着博主实践了,挺好玩,还写成了图形界面的,但是我觉得布局可以再优化一点点,还可以在打包成exe单文件。

步骤:

先调整布局

我修改后的代码:

# -*- coding: utf-8 -*-

# Created by yawa1hz1 on 2018/6/12 15:17.

import urllib.parse

import urllib.request

from tkinter import *

def youdao(words):

# 构建url链接

# url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'

# 这里要去掉?号前面的_o,不然会进行加密算法,导致失败

url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'

# 构建请求头

headers = {

"User-Agent": 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:59.0) Gecko/20100101 Firefox/59.0'

}

# words = input("请输入要翻译的内容:")

# 构建请求体

format_data = {

'i': words,

'from': 'AUTO',

'to': 'AUTO',

'smartresult': 'dict',

'client': 'fanyideskweb',

'salt': '1526368137702',

'sign': 'f0cd13ef1919531ec9a66516ceb261a5',

'doctype': 'json',

'version': '2.1',

'keyfrom': 'fanyi.web',

'action': 'FY_BY_REALTIME',

'typoResult': 'true'

}

# 进行url编码

format_data = urllib.parse.urlencode(format_data).encode("utf-8")

# 获取request文件(传入了data参数,就是post请求)

request = urllib.request.Request(url, data=format_data, headers=headers)

# 打开请求文件

response = urllib.request.urlopen(request)

# 读取文件内容

content = response.read()

content = eval(content)

ret = content["translateResult"][0][0]['tgt']

print(ret)

return ret

# 主程序

root = Tk()

# 设置标题

root.title("呆瓜词典")

# 设置主窗口大小

root.geometry("300x120")

# 可变大小

root.resizable(width=False, height=False)

# 第一排输入框 输入查询的内容

# 左边是一个标签

l1 = Label(root, text='查询内容', bg="yellow", font=(12), height=1, width=8)

l1.place(x=20, y=20)

var1 = StringVar()

input_text = Entry(root, textvariable=var1)

input_text.place(x=100, y=20)

# 第二排显示框 显示查询的结果

# 左边是一个标签

l2 = Label(root, text='查询结果', bg="yellow", font=(12), height=1, width=8)

l2.place(x=20, y=60)

var2 = StringVar()

output_text = Entry(root, textvariable=var2)

output_text.place(x=100, y=60)

# 作者

l1 = Label(root, text='By 呆瓜and杨', font=(6), height=1, width=12)

l1.place(x=190, y=90)

# 调用youdao函数,传进要翻译的内容

def func():

words = var1.get()

if words:

# print(words)

result = youdao(words)

var2.set(result)

# 添加一个按钮

b = Button(root, text="查询", command=func)

b.place(x=250, y=15)

# 运行主程序

root.mainloop()

偷笑,我在作者那加了自己名字,皮了一下。运行生成tkinter程序后,如下图,

调整后

打包生成exe单文件

利用Pyinstaller的命令行生成exe单文件,Pyinstaller是Python的第三方库,可以用pip来安装,或者利用PyCharm的Project Interpreter来安装。

打包生成exe

下图是我把Pyinstaller命令配置到PyCharm里的第三方工具里的操作界面

Pyinstaller

对于Pyinstaller命令的使用说明可以去网上搜搜。注意生成exe过程中会产生很多构建文件。

最后,看成果吧,我又皮了一下,加了图标,哈哈。

exe

快捷键

查询单词别提多方便,好了,就这样吧,大家可以自己生成一个exe玩玩。

python爬取有道词典_利用Python3和Charles爬取有道词典,生成翻译exe单文件相关推荐

  1. python爬取有道词典_利用Python3和Charles爬取有道词典

    一.用Charles爬取数据 Charles是一个多平台的抓包工具,可以很方便的抓取http和https数据. 1.抓取数据 抓取数据前我们首先要清楚,由于有道词典的翻译使用的是post请求,所以我们 ...

  2. python有道词典-利用Python3和Charles爬取有道词典

    一.用Charles爬取数据 Charles是一个多平台的抓包工具,可以很方便的抓取http和https数据. 1.抓取数据 抓取数据前我们首先要清楚,由于有道词典的翻译使用的是post请求,所以我们 ...

  3. python爬取大众点评数据_利用Node.js制作爬取大众点评的爬虫

    前言 Node.js天生支持并发,但是对于习惯了顺序编程的人,一开始会对Node.js不适应,比如,变量作用域是函数块式的(与C.Java不一样):for循环体({})内引用i的值实际上是循环结束之后 ...

  4. python爬取网易词典,利用Python3和Charles爬取有道词典

    from tkinter import * import urllib.parse import urllib.request def youdao(words): # 构建url url = 'ht ...

  5. typora 有道云笔记_利用神器Typora+PicGo,实现有道云不用会...

    点击上方☝,轻松关注!及时获取有趣有料的技术文章 在这里插入图片描述 " 本文是一篇工具的使用整理,希望能够帮助到你. 01 开始 阳春三月已过,感觉最近的天气是比较舒适的,在这个城市,湿冷 ...

  6. Python爬取网站用户手机号_利用python爬取慕课网站上面课程

    1.抓取网站情况介绍 抓取网站:http://www.imooc.com/course/list 抓取内容:要抓取的内容是全部的课程名称,课程简介,课程URL ,课程图片URL,课程人数(由于动态渲染 ...

  7. 用python爬取qq空间内容_利用Fiddler抓包和py的requests库爬取QQ空间说说内容并写入文件...

    [Python] 纯文本查看 复制代码#!C:\Program Files\Python36 python # -*- coding: UTF-8 -*- """ @au ...

  8. python有道字典_利用python实现命令行有道词典的方法示例

    前言 由于一直用Linux系统,对于词典的支持特别不好,对于我这英语渣渣的人来说,当看英文文档就一直卡壳,之前用惯了有道词典,感觉很不错,虽然有网页版的但是对于全站英文的网页来说并不支持.索性自己实现 ...

  9. python定时开关机的代码_利用Python实现Windows定时关机功能

    是最初的几个爬虫,让我认识了Python这个新朋友,虽然才刚认识了几天,但感觉有种莫名的默契感.每当在别的地方找不到思路,总能在Python找到解决的办法.自动关机,在平时下载大文件,以及跑程序的时候 ...

最新文章

  1. 慕了!北京大学新校区来了!
  2. IDC:2017年,40%的CIO将失去在企业中的领导地位
  3. iOS 使用Instruments优化内存性能
  4. starting mysql. success!_启动mysql报错解决问题过程
  5. python框架Flask学习笔记之get和post请求
  6. .Net Micro Framework 快速入门
  7. java main 声明_Java中main方面面试题
  8. hashtable - hashmap
  9. JAVA入门级教学之(final关键字)
  10. 贵阳打出大数据战略组合拳
  11. matlab遗传算法选址(多约束条件)
  12. 微软vc运行库地址VC9VC11
  13. linux复制文件查看进度条,Linux 如何显示文件夹拷贝或者移动的进度条
  14. 机器视觉实用工具集NO.15——利用图像放射变换做类似文件扫描仪效果工具
  15. Oracle用户、身份、数据类型、和mysql的区别
  16. 计算机重启打印机无法使用,为什么打印机在电脑重启后就不能用了并且也无法添加?-win7添加打印机...
  17. 数模论文写作方法1|标题确立
  18. iOS 防键盘遮挡
  19. 抄底利器!如何用Python量化 识别股票双底形态走势!
  20. python统计中英文字符个数-Python统计英文、中文、数字、空格等字符数

热门文章

  1. P12 离散控制系统-《Matlab/Simulink与控制系统仿真》程序指令总结
  2. 3.3 前向传播与反向传播-机器学习笔记-斯坦福吴恩达教授
  3. supervisor
  4. 【PC工具】更新win10关闭更新工具及注意事项
  5. WiFi漫游了解一下?大户型wifi组网方案
  6. 揭开雷达的面纱(科普)探测能力
  7. 建模案例:最优截断切割问题
  8. 关于多路复用技术的思考
  9. O029、教你看懂OpenStack日志
  10. JAVA中关于并发的一些理解