最近一直在一個平台學習Python,所以分享下課程里面抓取百度翻譯的操作。原理其實也很簡單,就是將瀏覽器請求的操作我們用python進行模擬,從而獲取到返回的數據,我們將返回的數據進行提取,從而得到我們想要的內容。
一、安裝requests模塊
1.當然如果安裝過了就可以跳過這一步了。如果沒有安裝過可以通過命令行輸入 pip install requests 進行安裝。如果你是用的pycharm,那么需要在當前工程下的venv里面安裝,因為我一開始直接打開命令行輸入的命令,安裝成功但是程序導入包的時候還是提示找不到這個模塊,后面在工程下的venv目錄下安裝就好了。
2.當然也可以通過pycharm自帶的安裝模塊進行安裝。點擊File->settings 找到如下圖的位置,輸入你需要安裝的模塊名稱,然后點擊Install Package即可。當然推薦這種方式安裝了。
二、進行百度翻譯數據請求的收集
1.首先我們進入百度的翻譯頁面,網址 http://fanyi.baidu.com/translate。這里我們需要點開開發者模式(像搜狗瀏覽器快捷鍵就是F12),將瀏覽器切換成手機模式(最上面圈起來的那個小圖標點擊一下就是手機模式,其他瀏覽器圖標也差不多)。因為PC端的web在post提交數據的時候會有2個我們不好獲取的參數(其中一個是token),但是手機版的沒有這2個參數,所以我們選擇手機版進行所需要的數據收集。
2.我們輸入一個查詢的內容,點擊翻譯按鈕。這個時候我們可以看到Network下會有很多文件,我們找到如圖下的這個文件,會發現我們想要的一些信息都在這個里面了。
request URL:請求的地址
request method:請求的方式,一般常見的也就Post和Get
user-agent:用戶代理,你會發現pc和手機請求的時候這個里面的值是不一樣的。而且如果你不設置的話,里面會有一個python的默認值。這個值可能會影響網站給你返回的數據。
form data:就是我們提交的表單數據了。而參數的zh表示中文,en表示英文,這個可以多獲取幾個語言的參數,然后自行選擇從哪個語言翻譯成哪個語言即可。
3.我們點擊response可以看到返回的數據,我們想要的數據就在這個里面了。
格式化后我們最后可以發現data下的st_tag里面就是我們想要的數據了,到時候直接解析出來這個內容即可。
三、附上Python源碼
import requests #導入需要的包 import json search = input("請輸入你要翻譯的內容:") url = "http://fanyi.baidu.com/extendtrans" #請求的地址 headers={"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36"} #設置請求的頭部 #設置提交的數據 posData={"query":search, "from":"en", "to":"zh"} response = requests.post(url=url,data=posData,headers=headers)#模擬請求 #獲取response的數據有2種方式 一種是text獲取的直接是文本格式 但是可能有亂碼 需要手動設置response.encoding("編碼") 解決亂碼 #還有一種就是response.content 里面存的是網站直接返回的數據 二進制格式 然后通過decode解碼即可 #因為返回的是json對象,所以我們將最后解碼后的字符串進行json格式轉換 使用json.loads()進行轉換 json_data=json.loads(response.content.decode()) #然后我們可以通過格式化工具進行json的解析 print("單詞:{0} 翻譯:{1}".format(search,json_data["data"]["st_tag"]))
運行效果
不到10行代碼就可以搞定,現在想了想如果用java實現的話恐怕幾十行吧,大家也來試試吧^_^