爬取百度翻譯頁面信息
以POST方法發送JSON數據,爬取響應信息,并且需要對響應信息對象類型進行區分。
import requests
import json#1.指定url
post_url = 'https://fanyi.baidu.com/sug'#2.進行UA封裝
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0'
}#3.post請求參數處理(同get請求一致)
word = input('enter a word:')
data = {'kw':word
}#4.請求發送
response = requests.post(url=post_url,data=data,headers=headers)#5.獲取響應數據:json()方法返回的是obj(如果確認響應數據是json類型的,才可以使用json()方法
dic_obj = response.json()#6.持久性存儲,可自行設置存儲路徑及文件名
fileName = word+'.json'
fp = open(fileName,'w',encoding='utf-8')
json.dump(dic_obj,fp=fp,ensure_ascii=False)print('over!!!')
響應對象類型
服務器返回的響應數據,本質上是「一串字節流」,但按用途和格式可以分成幾大類:
1. 文本類(人類可讀)
類型 | MIME 類型(Content-Type ) | 例子 | 用途 |
---|---|---|---|
HTML | text/html | <html>... | 網頁結構 |
純文本 | text/plain | Hello World | 簡單文本 |
JSON | application/json | {"name":"Tom"} | API 數據交換 |
XML | application/xml | <user><name>Tom</name></user> | 老派 API、配置文件 |
CSV | text/csv | name,age\nTom,18 | 表格數據 |
CSS/JS | text/css , application/javascript | .btn{color:red} | 樣式和腳本 |
2. 二進制類(不可直接讀,需解析)
類型 | MIME 類型 | 例子 | 用途 |
---|---|---|---|
圖片 | image/jpeg , image/png , image/webp | 二進制圖片流 | 展示圖片 |
音頻/視頻 | audio/mp3 , video/mp4 | 二進制媒體流 | 播放媒體 |
文件下載 | application/octet-stream | file.zip | 任意文件下載 |
字體文件 | font/woff2 | 二進制字體 | 網頁字體 |
Protobuf | application/x-protobuf | 二進制序列化數據 | 高效接口通信 |
3. 壓縮或編碼過的數據
Gzip/Deflate/Brotli:響應頭 Content-Encoding: gzip,數據被壓縮,需先解壓。
分塊傳輸:響應頭 Transfer-Encoding: chunked,數據被分塊發送,需拼接。
4. 空數據
狀態碼 204 (No Content):成功但無返回體,比如某些 DELETE 請求。
如何判斷類型?
看響應頭里的兩個關鍵字段:
Content-Type: application/json; charset=utf-8
Content-Encoding: gzip
Content-Type 告訴你「數據格式」。
Content-Encoding 告訴你「是否壓縮」。
響應數據可以是「任何你能用瀏覽器打開的東西」——從網頁、JSON、圖片、視頻,到壓縮包、字體、音頻流,甚至空響應。