破解百度翻譯
翻譯是一件麻煩的事情,如果可以寫一個爬蟲程序直接爬取百度翻譯的翻譯結果就好了,可當我打開百度翻譯的頁面,輸入要翻譯的詞時突然發(fā)現(xiàn)不管我要翻譯什么,網(wǎng)址都沒有任何變化,那么百度翻譯要怎么爬取呢?
爬取百度翻譯之前,我們先要明白百度翻譯是怎么在不改變網(wǎng)址的情況下實現(xiàn)翻譯的。百度做到這一點是用 AJAX 實現(xiàn)的,簡單地說,AJAX的作用是在不重新加載網(wǎng)頁的情況下進行局部的刷新。
了解了這一點,那么我們要怎么得到 AJAX 工作時請求的URL呢?老規(guī)矩,使用抓包工具。
爬蟲步驟
在 “百度翻譯” 頁面右鍵,選擇“Notework”選擇 “ XHR ”
如果畫面沒有任何數(shù)據(jù),可以試著輸入要翻譯的詞,比如說我輸入“dog”時,就發(fā)生了如下的變化
我們看到此時的 kw 是我要翻譯的詞,說明這是我們要找的東西。
(注意:我們發(fā)現(xiàn)其中有三個 sug ,我選的只是其中一個。如果我們?nèi)紟c開看,就會發(fā)現(xiàn),他們的 kw 分別是:d 和 do。這是因為我打 dog 時一個單詞一個單詞打的,而 AJAX 是時時刷新。如果輸入中文就不會出現(xiàn)這種情況。翻譯中文時,我們找的也不是 sug 了,具體是什么,就看哪個包的 data 的值是我們要翻譯的詞。)
然后我們在回到上面,找到我們需要指定的 URL 、我們要選擇的請求命令以及爬取到的數(shù)據(jù)的類型。
歐克,做到這里我們的前期準備就完成了,下面就可以開始著手寫代碼了。
import requests
if __name__ == "__main__":
# 指定 url
url = "https://fanyi.baidu.com/sug"
# 要翻譯的詞
keyword = input("需要翻譯的詞:")
data = {
"kw": keyword
}
# UA 偽裝
header = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
}
# 發(fā)送請求
response = requests.post(url = url, data = data, headers = header).json()
print(response)
我們運行程序發(fā)現(xiàn)結果是這樣的:
因為請求到的數(shù)據(jù)比較短,所以我們比較容易地看出數(shù)據(jù)的結構是字典里有列表,列表里又有字典結構。如果比較長,我們可以使用在線 json 轉換,轉換后的數(shù)據(jù)是這樣的
我們只需要 dog 的釋義,所以我們還可以對我們代碼進行優(yōu)化
print(response["data"][0]["v"])
注意
關于 data 的字典,并不是說只需要 “ kw ”: dog, data 的字典里要存儲的是抓包工具里 from data 里所有的值,如果沒有值,那么相對應的值就是空字符串。
如果學會了,你試著自己寫一個破解有道翻譯的爬蟲程序吧!
到此這篇關于python爬蟲之爬取百度翻譯的文章就介紹到這了,更多相關python爬取百度翻譯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- python做翻譯軟件詳解,小白也看得明白
- 告別網(wǎng)頁搜索!教你用python實現(xiàn)一款屬于自己的翻譯詞典軟件
- 用 Python 寫的文檔批量翻譯工具效果竟然超出想象
- 教你如何利用Python批量翻譯英文Word文檔并保留格式
- 三大Python翻譯神器再也不用擔心學不好英語