python 爬虫 请求百度翻译之详细翻译(解决第二个反爬:Cookie)

代码

import urllib.request
import urllib.parse

# (1) 定义一个url存储 百度翻译的请求 URL
url = "https://fanyi.baidu.com/v2transapi?from=en&to=zh"
# (2) 分别把Cookie,User-Agent行粘贴过来并变成字典(注意:字典前后变字符串)
headers = {
    # User-Agent是之前文章讲的第一个反爬 百度翻译之详细翻译非必须,可删!
    "User-Agent": "获取来源可参照前文",
    # Cookie为第二个反爬,是此次爬取的关键!!!
    "Cookie": '获取来源参照下图'
}
# (3) URL的查询参数设置
data = {
    'from': 'en',
    'to': 'zh',
    'query': 'hello',
    'simple_means_flag': '3',
    'sign': '54706.276099',
    'token': 'df6bfb5ad673db08c6500297b93eee0d',
    'domain': 'common',
    'ts': '1691212497442',
}
# 参考!细节1!
# !Request的data参数可以是一个字节流(bytes),也可以是一个符合特定编码格式的字符串(str)。
data = urllib.parse.urlencode(data).encode('utf-8')

# (4) 请求对象的定制 字典类型变为!Request类型,因参数顺序问题所以这里必须使用!关键字传参
request = urllib.request.Request(url=url, data=data, headers=headers)

# (4) 模拟浏览器向服务器发送请求  记得连网!
response = urllib.request.urlopen(request)

# (5) 获取响应中的页面的源码
content = response.read().decode('utf-8')
# print(type(content))  

# 参考!细节2!
# (6) json转换能看懂 
import json

obj = json.loads(content)
print(obj)

代码数据来源,参照下图所示

(1)百度翻译页面输入英文hello,空白处右键检查

python 爬虫 请求百度翻译之详细翻译(解决第二个反爬:Cookie)_第1张图片

(2)点击网络并刷新

python 爬虫 请求百度翻译之详细翻译(解决第二个反爬:Cookie)_第2张图片

(3) 找到v2transapi?from=en&to=zh并点击,请求URL如下图

python 爬虫 请求百度翻译之详细翻译(解决第二个反爬:Cookie)_第3张图片

(4)Cookie如下图

python 爬虫 请求百度翻译之详细翻译(解决第二个反爬:Cookie)_第4张图片 

(5)URL的查询参数如下图

python 爬虫 请求百度翻译之详细翻译(解决第二个反爬:Cookie)_第5张图片

细节1:

urllib.request中的data参数用于发送POST请求时传递的数据。当我们发送POST请求时,需要将请求的数据作为参数传递给服务器,data参数就是用来传递这些数据的。该参数可以是一个字节流(bytes),也可以是一个符合特定编码格式的字符串(str)。

当data参数为字节流时,可以使用urllib.parse.urlencode()方法将字典形式的参数转化为字节流。例如:

import urllib.parse
import urllib.request

url = "http://example.com"
values = {'key1': 'value1', 'key2': 'value2'}
data = urllib.parse.urlencode(values).encode('utf-8')

req = urllib.request.Request(url, data=data)
response = urllib.request.urlopen(req)

当data参数为字符串时,需要先将其编码为字节流再传递给data参数。例如: 

import urllib.request

url = "http://example.com"
data = 'key1=value1&key2=value2'

req = urllib.request.Request(url, data=data.encode('utf-8'))
response = urllib.request.urlopen(req)

通过设置data参数,我们可以将请求中的数据发送给服务器,以便进行相应的处理和响应。 

细节2:

未使用json转换

python 爬虫 请求百度翻译之详细翻译(解决第二个反爬:Cookie)_第6张图片

使用json转换后

python 爬虫 请求百度翻译之详细翻译(解决第二个反爬:Cookie)_第7张图片

你可能感兴趣的:(python,爬虫,开发语言,json)