Python爬虫03_Requests破解百度翻译
爬取百度翻译页面信息
以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、图片、视频,到压缩包、字体、音频流,甚至空响应。