Pythonクローラーの実戦、リクエスト+ランダムモジュール、Pythonがデスクトップ翻訳ソフトを作る

序文

今日から Python で翻訳ソフトウェアを作成してみてください。ここで、コードを必要としている友人にコードを提供し、いくつかのヒントを提供します。

プログラムの機能は非常にシンプルです。3 つの主流の翻訳者から任意の翻訳者を選択して単語や文章を翻訳し、PyQt5 モジュールを使用して人間とコンピューターの相互作用を実現し、要求モジュールを使用して要求を送信し、翻訳結果をユーザー。

ここに画像の説明を挿入

開発ツール

Python バージョン: 3.8

関連モジュール:

requests モジュール
re モジュール
time モジュール
js2py モジュール
random モジュール
hashlib モジュール

環境構築

Python をインストールして環境変数に追加すると、必要な関連モジュールが pip によってインストールされます。

アイデア分析

プログラムの機能は非常にシンプルです。3 つの主流の翻訳者から任意の翻訳者を選択して単語や文章を翻訳し、PyQt5 モジュールを使用して人間とコンピューターの相互作用を実現し、要求モジュールを使用して要求を送信し、翻訳結果をユーザー。

実装

百度の翻訳を例にとると

ページ情報を表示するために任意に翻訳します。
ここに画像の説明を挿入
これがポスト リクエストであることが画像からわかります。また、リクエスト ヘッダーのデータも明確に画像に表示されています。

リクエストヘッダー

コード


'''
User-Agent和Cookie 需要自行添加
Token中的T换成小写t
Function:
	翻译类
'''
class baidu():
	def __init__(self):
		self.session = requests.Session()
		self.session.cookies.set('BAIDUID', '19288887A223954909730262637D1DEB:FG=1;')
		self.session.cookies.set('PSTM', '%d;' % int(time.time()))
		self.headers = {
    
    
							'User-Agent': 'XXX'
						}
		self.data = {
    
    
						'query': '',
						'simple_means_flag': '3',
						'sign': '',
						'Token': '',
					}
		self.url = 'https://fanyi.baidu.com/v2transapi'
	def translate(self, word):
		self.data['query'] = word
		self.data['token'], gtk = self.getTokenGtk()
		self.data['token'] = '6482f137ca44f07742b2677f5ffd39e1'
		self.data['sign'] = self.getSign(gtk, word)
		res = self.session.post(self.url, data=self.data)
		return [res.json()['trans_result']['data'][0]['result'][0][1]]
	def getTokenGtk(self):
		url = 'https://fanyi.baidu.com/'
		res = requests.get(url, headers=self.headers)
		token = re.findall(r"token: '(.*?)'", res.text)[0]
		gtk = re.findall(r";window.gtk = ('.*?');", res.text)[0]
		return token, gtk
	def getSign(self, gtk, word):
		evaljs = js2py.EvalJs()
		js_code = js.bd_js_code
		js_code = js_code.replace('null !== i ? i : (i = window[l] || "") || ""', gtk)
		evaljs.execute(js_code)
		sign = evaljs.e(word)
		return sign

グラフィカル インターフェイス コードの実装

class Demo(QWidget):
	def __init__(self, parent=None):
		super().__init__()
		self.setWindowTitle('翻译软件-公众号: Python工程狮')
		self.Label1 = QLabel('原文')
		self.Label2 = QLabel('译文')
		self.LineEdit1 = QLineEdit()
		self.LineEdit2 = QLineEdit()
		self.translateButton1 = QPushButton()
		self.translateButton2 = QPushButton()
		self.translateButton3 = QPushButton()
		self.translateButton1.setText('baidu翻译')
		self.translateButton2.setText('youdao翻译')
		self.translateButton3.setText('Google翻译')
		self.grid = QGridLayout()
		self.grid.setSpacing(12)
		self.grid.addWidget(self.Label1, 1, 0)
		self.grid.addWidget(self.LineEdit1, 1, 1)
		self.grid.addWidget(self.Label2, 2, 0)
		self.grid.addWidget(self.LineEdit2, 2, 1)
		self.grid.addWidget(self.translateButton1, 1, 2)
		self.grid.addWidget(self.translateButton2, 2, 2)
		self.grid.addWidget(self.translateButton3, 3, 2)
		self.setLayout(self.grid)
		self.resize(400, 150)
		self.translateButton1.clicked.connect(lambda : self.translate(api='baidu'))
		self.translateButton2.clicked.connect(lambda : self.translate(api='youdao'))
		self.translateButton3.clicked.connect(lambda : self.translate(api='google'))
		self.bd_translate = baidu()
		self.yd_translate = youdao()
		self.gg_translate = google()
	def translate(self, api='baidu'):
		word = self.LineEdit1.text()
		if not word:
			return
		if api == 'baidu':
			results = self.bd_translate.translate(word)
		elif api == 'youdao':
			results = self.yd_translate.translate(word)
		elif api == 'google':
			results = self.gg_translate.translate(word)
		else:
			raise RuntimeError('Api should be <baidu> or <youdao> or <google>...')
		for result in results:
			self.LineEdit2.setText(result)

やっと

読者に感謝するために、最近のお気に入りのプログラミング ドライ グッズをいくつか紹介し、すべての読者にお返しし、お役に立てれば幸いです。

初心者向けの情報が満載ですよ〜

Xiaoyuと一緒に成長してください!

① 100冊以上のPythonの電子書籍(主流と古典の本が利用できるはずです)

② Python 標準ライブラリ情報 (最も完全な中国語版)

③ 爬虫類プロジェクトのソース コード (40 または 50 の興味深い古典的な手の練習プロジェクトとソース コード)

④Python、クローラー、Web開発、ビッグデータ解析の基礎動画(初心者向け)

⑤Python学習ロードマップ(さらば影響力のある学習)

材料

おすすめ

転載: blog.csdn.net/Modeler_xiaoyu/article/details/128207873