先附上一段 “百度翻譯” 的爬蟲代碼
# python爬蟲實現百度翻譯 # urllib和request POST參數提交
from urllib import request,parse import json def fanyi(keyword): base_url = 'https://fanyi.baidu.com/sug'
# 構建請求對象
data = {'kw': keyword} data = parse.urlencode(data).encode('utf-8') # 模擬瀏覽器
header = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"} req = request.Request(url=base_url,data=data,headers=header) res = request.urlopen(req) # 獲取響應的json字符串
str_json = res.read().decode('utf-8') # 把json轉換成字典
myjson = json.loads(str_json) # 將字符串轉化為字典
info = myjson['data'][0]['v'] print(info) if __name__=='__main__': while True: keyword = input('請輸入翻譯的單詞:') if keyword == 'q': break fanyi(keyword)
1. 其中,data = parse.urlencode(data).encode('utf-8') 的作用是,將字典里面所有的鍵值轉化為 query-string 格式(key=value&key=value),並且將中文轉碼。
2. 然后,req = request.Request(url=base_url,data=data,headers=header)的作用是,將base_url, data, headers 拼接成一個請求的 url, 命名為 req。
注:在這里要仔細介紹一下 python3 的編碼問題。(看了好多資料才明白)
參考 https://blog.csdn.net/xiaofan_0208/article/details/77366363
https://blog.csdn.net/apache0554/article/details/53889253
data = parse.urlencode(data).encode('utf-8') ,是將data轉化為 utf-8格式的編碼。decode()都是將其他編碼轉換為Unicode編碼。
3. myjson = json.loads(str_json) 的作用是,將字符串轉化為字典,因為從瀏覽器讀取出來的內容都是字符串格式。
編碼和解碼JSON數據的兩個主要的函數是 json.dumps() 和 json.loads()。參考本片文章:https://blog.csdn.net/liangxy2014/article/details/78984998
import json data = { 'name' : 'ACME', 'shares' : 100, 'price' : 542.23
} json_str = json.dumps(data) # 將字典編碼成 json 格式 data = json.loads(json_str) # 將 json文本 解碼成字典格式
