首页 > 其他分享 >爬虫_059_urllib post请求百度翻译

爬虫_059_urllib post请求百度翻译

时间:2024-02-12 21:56:29浏览次数:22  
标签:url request urllib headers 059 import post data

目录

分析百度翻译找接口

image-20240212205041877

image-20240212205142136

image-20240212205109577

编写代码

import urllib.request
import urllib.parse

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
}
url = 'https://fanyi.baidu.com/v2transapi?from=en&to=zh'
# post请求的参数必须要进行编码
data = {
    'from': 'en',
    'to': 'zh',
    'query': 'spider',
    'transtype': 'realtime',
    'simple_means_flag': 3,
    'sign': 63766.268839,
    'token': '6dab4cd9524d6653409c8da4b382cf38',
    'domain': 'common',
    'ts': 1707741926668
}
data = urllib.parse.urlencode(data)

request = urllib.request.Request(url=url, data=data, headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
print(content)

这里有没有发现一个很有意思的地方。

如果是get请求,那么就是用urllib.request.Request(url=url, headers=headers)

如果是post请求,那么就是用urllib.request.Request(url=url, data=data, headers=headers)

需要注意的点

image-20240212205916434

POST请求的data必须是字节,不能够是字符串。

现在我们创建了data,这是一个对象,然后我们通过urlencode将这个对象变成了字符串。

但是必须再通过编码,让它变成字节形式。

修改代码

import urllib.request
import urllib.parse

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
}
url = 'https://fanyi.baidu.com/v2transapi?from=en&to=zh'
# post请求的参数必须要进行编码
data = {
    'from': 'en',
    'to': 'zh',
    'query': 'spider',
    'transtype': 'realtime',
    'simple_means_flag': 3,
    'sign': 63766.268839,
    'token': '6dab4cd9524d6653409c8da4b382cf38',
    'domain': 'common',
    'ts': 1707741926668
}
data = urllib.parse.urlencode(data).encode('utf-8')
request = urllib.request.Request(url=url, data=data, headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
print(content)

image-20240212213316224

\u672a\u77e5\u9519\u8bef 是一个 Unicode 转义序列,它表示一串中文字符。

具体来说,每一个 \u 后面的四个十六进制数字代表一个 Unicode 码点,这个码点对应一个字符。

  • \u672a 对应汉字 "未"
  • \u77e5 对应汉字 "知"
  • \u9519 对应汉字 "错"
  • \u8bef 对应汉字 "误"

所以,整个字符串 \u672a\u77e5\u9519\u8bef 转换成中文字符就是 "未知错误"。

虽然是未知错误,但是已经证明能够请求了。错误的原因,可能是header的构建,不够完整。

返回数据解析

从上面的报错中,我们可以看到返回的是一个json字符串类型的数据。

image-20240212213812299

import urllib.request
import urllib.parse
import json

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
}
url = 'https://fanyi.baidu.com/v2transapi?from=en&to=zh'
# post请求的参数必须要进行编码
data = {
    'from': 'en',
    'to': 'zh',
    'query': 'spider',
    'transtype': 'realtime',
    'simple_means_flag': 3,
    'sign': 63766.268839,
    'token': '6dab4cd9524d6653409c8da4b382cf38',
    'domain': 'common',
    'ts': 1707741926668
}
data = urllib.parse.urlencode(data).encode('utf-8')
request = urllib.request.Request(url=url, data=data, headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
obj = json.loads(content)
print(obj)

最后的说明

我上面使用的接口,是百度翻译的详细翻译接口,不是简单翻译的接口。

其实,应该使用下面的接口:

image-20240212214537126

用这个接口的话,就很容易得到结果,如下图所示:

image-20240212214611473

import urllib.request
import urllib.parse
import json

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
}
# url = 'https://fanyi.baidu.com/v2transapi?from=en&to=zh'
url = 'https://fanyi.baidu.com/sug'
# post请求的参数必须要进行编码
data = {
    'kw': 'spider'
}
data = urllib.parse.urlencode(data).encode('utf-8')
request = urllib.request.Request(url=url, data=data, headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
obj = json.loads(content)
print(obj)

image-20240212213522124

标签:url,request,urllib,headers,059,import,post,data
From: https://www.cnblogs.com/gnuzsx/p/18014169

相关文章

  • 爬虫_058_urllib get请求的urlencode方法
    目录urllib.parse.urlencode()quote方法使用的不是很经常的。因为quote的作用是将汉字转为百分号编码后的ASCII字符串。如果你的路径当中只有一个参数,你这样使用quote拼接一下url,这是没有问题的。如果你的路径当中有多个参数,并且参数都是中文的,你还使用quote,就TMD懵逼了。......
  • 爬虫_057_urllib get请求的quote方法
    目录引子编码集的演变需求知识点重新测试get请求方式的quote方法引子将百度搜索周杰伦的地址栏地址,复制到pycharm当中变成下面的样子:https://www.baidu.com/s?wd=%E5%91%A8%E6%9D%B0%E4%BC%A6编码集的演变ASCII编码:一个字符一个字节中国:GB2312日本:Shift_JIS韩国:Euc-k......
  • 爬虫_056_urllib请求对象的定制
    目录url组成第一个反爬-UA校验制造一个UA请求对象的定制url组成协议httphttps主机www.baidu.com端口号http80https443mysql3306oracle1521redis6379mongodb27017路径参数?号锚点#号第一个反爬-UA校验制造一个UA从浏览器......
  • 爬虫_055_urllib下载
    目录下载网页下载图片下载视频总结下载网页下载图片下载视频总结真的,没有什么含金量,就是找到资源的地址,然后使用urllib.request.urlretrieve()就可以了。......
  • 爬虫_054_urllib的1个类型和6个方法
    目录1个类型read()方法readline()方法readlines()方法getcode()方法geturl()方法getheaders()方法1个类型response的类型是HTTPResponseread()方法read():一个字节一个字节去读取,直到读完。read(5):读取5个字节readline()方法readline()方法就是读取一行。readline......
  • 爬虫_053_urllib的基本使用
    目录urllib简介基本代码使用urllib简介urllib是python自带的,不需要我们安装。基本代码使用importurllib.requesturl='http://www.baidu.com'response=urllib.request.urlopen(url)#read()方法返回字节形式的二进制数据b'xxx',需要解码成字符串content=respons......
  • 【数据库】postgressql设置数据库执行超时时间
    在这篇文章中,我们将深入探讨PostgreSQL数据库中的一个关键设置:SETstatement_timeout。这个设置对于管理数据库性能和优化查询执行时间非常重要。让我们一起来了解它的工作原理以及如何有效地使用它。什么是statement_timeout?statement_timeout是一个PostgreSQL服务器参数,用于设......
  • 【数据库】对大数据量数据集,PostgreSQL分组统计数量,限定每组最多数量
    一、背景介绍在处理大数据量数据集时,我们经常需要进行分组统计。例如,我们需要统计每个城市的人口数量、每个年龄段的人数等。在PostgreSQL中,我们可以使用row_number()函数结合over(partitionby)子句来实现这个功能。同时,为了限定每组最多数量,我们可以使用row_num<=100......
  • postman 学习第6天
    配置请求参数在Postman中,你可以配置请求的参数,例如URL参数、请求头和请求体。了解如何正确配置这些参数对于发送有效的API请求非常重要。你可以使用Postman的参数化请求功能,以便在测试或实际使用时动态地插入参数。使用Postman的认证和授权机制API通常需要认证和授权才能访问。在Po......
  • Ubuntu18.04定时备份MySQL、PostgreSQL数据库
    1、备份MySQL数据库脚本LOG_DATE=`date+'%Y-%m-%d%H:%M:%S'`LOG_PATH=/home/dbserver/script_data/backup.logecho"$LOG_DATE=======>开始备份以下mysql数据库:">>${LOG_PATH}DUMP=/usr/bin/mysqldumpOUT_DIR=/home/dbserver/backup/mysql_backupLINU......