python爬蟲之爬取百度翻譯

破解百度翻譯

翻譯是一件麻煩的事情,如果可以寫一個爬蟲程序直接爬取百度翻譯的翻譯結果就好瞭,可當我打開百度翻譯的頁面,輸入要翻譯的詞時突然發現不管我要翻譯什麼,網址都沒有任何變化,那麼百度翻譯要怎麼爬取呢?

爬取百度翻譯之前,我們先要明白百度翻譯是怎麼在不改變網址的情況下實現翻譯的。百度做到這一點是用 AJAX 實現的,簡單地說,AJAX的作用是在不重新加載網頁的情況下進行局部的刷新。

瞭解瞭這一點,那麼我們要怎麼得到 AJAX 工作時請求的URL呢?老規矩,使用抓包工具。

爬蟲步驟

在 “百度翻譯” 頁面右鍵,選擇“Notework”選擇 “ XHR ”

在這裡插入圖片描述

如果畫面沒有任何數據,可以試著輸入要翻譯的詞,比如說我輸入“dog”時,就發生瞭如下的變化

在這裡插入圖片描述

我們看到此時的 kw 是我要翻譯的詞,說明這是我們要找的東西。

(註意:我們發現其中有三個 sug ,我選的隻是其中一個。如果我們全都帶點開看,就會發現,他們的 kw 分別是:d 和 do。這是因為我打 dog 時一個單詞一個單詞打的,而 AJAX 是時時刷新。如果輸入中文就不會出現這種情況。翻譯中文時,我們找的也不是 sug 瞭,具體是什麼,就看哪個包的 data 的值是我們要翻譯的詞。)

然後我們在回到上面,找到我們需要指定的 URL 、我們要選擇的請求命令以及爬取到的數據的類型。

在這裡插入圖片描述

歐克,做到這裡我們的前期準備就完成瞭,下面就可以開始著手寫代碼瞭。

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"
        }

    # 發送請求
    response = requests.post(url = url, data = data, headers = header).json()

    print(response)

我們運行程序發現結果是這樣的:

在這裡插入圖片描述

因為請求到的數據比較短,所以我們比較容易地看出數據的結構是字典裡有列表,列表裡又有字典結構。如果比較長,我們可以使用在線 json 轉換,轉換後的數據是這樣的

在這裡插入圖片描述

我們隻需要 dog 的釋義,所以我們還可以對我們代碼進行優化

print(response["data"][0]["v"])

註意

關於 data 的字典,並不是說隻需要 “ kw ”: dog, data 的字典裡要存儲的是抓包工具裡 from data 裡所有的值,如果沒有值,那麼相對應的值就是空字符串。

如果學會瞭,你試著自己寫一個破解有道翻譯的爬蟲程序吧!

到此這篇關於python爬蟲之爬取百度翻譯的文章就介紹到這瞭,更多相關python爬取百度翻譯內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: