記事のディレクトリ
Pythonの爬虫類例:自家製の翻訳者
それをლ翻訳自家製適切な方法トランスレータをクロールしてみてください(^ω^ლ)、自分では、難しいことではない翻訳されるように、すべてのオハイオ州で
のポストとJSONによって、わずか数行(または2ダースライン)行うことができます!
達成するために必要な:ユーザーが英語または中国語で入力し、プログラムが対応する翻訳をプリントアウトすることができます。
翻訳の主要な機能を実現する、最も簡単な解決策は爬虫類です。ここで、我々は選択したサイトは、適切な方法の翻訳です:http://fanyi.youdao.com/
そして、まだ同じおなじみのプロセス:F12 - >ネットワーク - >アクション - >私たちが必要とするデータを検索する(URL内のデータか否かの判定)のうち、新たな負荷の要求で - >コントラスト、法律を見つけること。
ステップ
私はあなたがしたい知っていることは容易である動作のフローチャートについて置くXHR
データで検索します:
そして、データを見つけるために翻訳するテキストを入力し、私たちが必要です。
そして、私たちは本当にURLリクエストを見つけたい、ヘッダの内側を見ています。その後、操作を数回URLの法則を与えるために:
(そこ見下す、バグあり)
〜そして、あなたはそれのためのコードを書くことができます!より良い嘆き機能ルックにカプセル化
抗登るを解決
しかし、我々は問題が発生した、暗号化技術を使用して適切な方法翻訳抗爬虫類メカニズムがあります。あなたのプログラムでは、エラーの可能性があります:{“errorCode”:50}
基本的な解決策は、URLを削除することであることを"_o"
、目的はおそらく翻訳のバイパス抗爬虫類機構への適切な方法である、salt
とsign
。
URLが含まれている場合、「_oは、」自動的に次の二つのパラメータが含ま:塩、看板、見て密接に、これら2つのパラメータが変更にバインドされているが、しかし変更は明白ではありません。だから我々は、オーストリアのK.のないタリアパラメータを行います
サーバから返されたコンテンツは、あるjson
フォーマット。私たちは、リスト、エキスへの変換処理手段の辞書を扱うことができます。
コード
# -*- coding:utf-8 -*-
import requests
# 把代码封装成函数更python
def crawl(word):
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data = {'i': word,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTIME',
'typoResult': 'false'}
# 将需要post的内容,以字典的形式记录在data内。
r = requests.post(url, data=data)
# post需要输入两个参数,一个url,一个是data,返回的是一个Response对象
answer = r.json()
result = answer['translateResult'][0][0]['tgt']
print('"'+ word + '"的翻译结果:' + result + '\n')
if __name__=="__main__":
while(1): #自己设计输入结束的条件,原谅我弄了个死循环
crawl(input('请输入:'))
インターフェース
我々はまた、それに素敵なプラス(醜い)インターフェースを(実際には、良いか悪いかは重要ではありませんが、それは8間違っを達成することができます!)与えることができます。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
from tkinter import Tk,Button,Entry,Label,Text,END
class YouDaoFanyi(object):
def __init__(self):
pass
def crawl(self,word):
url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data={'i': word,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTIME',
'typoResult': 'false'}
r = requests.post(url, data)
answer = r.json()
result = answer['translateResult'][0][0]['tgt']
return result
class Application(object):
def __init__(self):
self.window = Tk()
self.fanyi = YouDaoFanyi()
#窗体名字
self.window.title(u'My Translation')
#可以自己调整窗口大小
self.window.geometry('300x400+500+300')
self.window.minsize(300,400)
self.window.maxsize(300,400)
self.entry = Entry(self.window)
self.entry.place(x=10,y=10,width=200,height=25)
self.entry.bind("<Key-Return>",self.submit1)
self.result_text1 = Text(self.window,background = 'azure')
self.result_text1.place(x = 10,y = 5,width = 285,height = 155)
self.result_text1.bind("<Key-Return>",self.submit1)
self.submit_btn = Button(self.window,text=u'翻译',command=self.submit)
self.submit_btn.place(x=205,y=165,width=35,height=25)
self.submit_btn2 = Button(self.window,text=u'清空',command = self.clean)
self.submit_btn2.place(x=250,y=165,width=35,height=25)
self.title_label = Label(self.window,text=u'翻译结果:')
self.title_label.place(x=10,y=165)
self.result_text = Text(self.window,background = 'light cyan')
self.result_text.place(x = 10,y = 190,width = 285,height = 165)
def submit1(self,event):
content = self.result_text1.get(0.0,END).strip().replace("\n"," ")
result = self.fanyi.crawl(content)
self.result_text.delete(0.0,END)
self.result_text.insert(END,result)
def submit(self):
content = self.result_text1.get(0.0,END).strip().replace("\n"," ")
result = self.fanyi.crawl(content)
self.result_text.delete(0.0,END)
self.result_text.insert(END,result)
print(content)
def clean(self):
self.result_text1.delete(0.0,END)
self.result_text.delete(0.0,END)
def run(self):
self.window.mainloop()
if __name__=="__main__":
app = Application()
app.run()
結果は
✿✿ヽ(°▽°)ノ✿~
--------誰もが人生について不平を言っていることは容易ではありませんが、生活のために静かに難しいです--------