파이썬 크롤러 실전, 요청+랜덤 모듈, 파이썬이 데스크탑 번역 소프트웨어를 만든다

머리말

지금 Python으로 번역 소프트웨어를 만들어 보세요. 필요한 친구에게 코드를 제공하고 몇 가지 팁을 제공합니다.

프로그램의 기능은 매우 간단합니다. 3개의 주류 번역가 중에서 번역가를 선택하여 단어와 문장을 번역하고, PyQt5 모듈을 사용하여 인간-컴퓨터 상호 작용을 실현하고, 요청 모듈을 사용하여 요청을 보내고, 번역 결과를 반환할 수 있습니다. 사용자.

여기에 이미지 설명 삽입

개발 도구

파이썬 버전: 3.8

관련 모듈:

요청 모듈
re 모듈
시간 모듈
js2py 모듈
무작위 모듈
hashlib 모듈

환경 빌드

Python을 설치하고 환경 변수에 추가하면 pip가 필요한 관련 모듈을 설치합니다.

아이디어 분석

프로그램의 기능은 매우 간단합니다. 3개의 주류 번역가 중에서 번역가를 선택하여 단어와 문장을 번역하고, PyQt5 모듈을 사용하여 인간-컴퓨터 상호 작용을 실현하고, 요청 모듈을 사용하여 요청을 보내고, 번역 결과를 반환할 수 있습니다. 사용자.

구현

Baidu 번역을 예로 들어 보겠습니다.

페이지 정보를 보기 위해 임의로 번역합니다.
여기에 이미지 설명 삽입
이것은 게시물 요청임을 사진에서 알 수 있으며 요청 헤더의 데이터도 사진에 명확하게 표시됩니다.

요청 헤더

암호


'''
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와 함께 성장하세요!

① Python 전자책 100권 이상(주류 및 고전 서적 제공 가능)

② Python 표준 라이브러리 정보(가장 완전한 중국어 버전)

③ Reptile 프로젝트 소스 코드(40~50개의 흥미롭고 고전적인 수작업 프로젝트 및 소스 코드)

④ 파이썬 기초, 크롤러, 웹 개발, 빅데이터 분석 동영상 (초보자에게 적합)

⑤ 파이썬 학습 로드맵(영향력 있는 학습과 작별)

재료

추천

출처blog.csdn.net/Modeler_xiaoyu/article/details/128207873