日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2025/4/5 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬取有道词典_利用Python3和Charles爬取有道词典,生成翻译exe单文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

原文:

一.用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单文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。