首页 > 其他分享 >urllib发送get请求_中文传参问题

urllib发送get请求_中文传参问题

时间:2024-09-12 22:47:58浏览次数:10  
标签:传参 urlencode wd get python urllib parse url

GET请求是HTTP协议中的一种基本方法,当需要在GET请求中传递中文参数时需要额外对中文进行编码(英文不需要),因为url中只能包含ascii字符。

可以使用urllib.parser.urlencode()或urllib.parse.quote()方法对中文转码。

详细查官方文档: https://docs.python.org/3.12/library/urllib.parse.html#module-urllib.parse

查看使用百度搜索“python爬虫”时,url会传递哪些参数

传递参数以“?”开始,由“&”分割。其中“python爬虫”传递给了“wd”。

浏览器将中文转换为url编码

直接使用中文传参会报错

对wd直接传中文参数
from urllib.request import urlopen, Request
# 请求地址
url = 'https://www.baidu.com/s?wd=python爬虫'
# 创建Request对象
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36'}
req = Request(url, headers=headers)
# 发送请求
resp = urlopen(req)
# 读取响应内容
print(resp.read().decode())
# 关闭连接
resp.close()

 

部分报错信息为:

UnicodeEncodeError: 'ascii' codec can't encode characters

修改上述代码url = 'https://www.baidu.com/s?wd=python%E7%88%AC%E8%99%AB'可以执行成功

使用python的urllib库对中文编码

urllib.parse.quote()

from urllib.parse import quote
# urllib.parse.quote()转换一个值
args = 'python爬虫'
print(quote(args))
'''
运行结果:
python%E7%88%AC%E8%99%AB
'''

urllib.parse.urlencode()

from urllib.parse import urlencode
# urllib.parse.urlencode() 转换键值对
args = {'wd': 'python爬虫'}
print(urlencode(args))
'''
运行结果:
wd=python%E7%88%AC%E8%99%AB
'''

两种方法实现含中文传参的GET请求

from urllib.request import Request, urlopen
from urllib.parse import quote, urlencode
# 请求地址
args1 = 'python爬虫' # 方法一,使用urllib.parse.quote()
# 方法二,使用urllib.parse.urlencode()
# args2 = {'wd': 'python爬虫'}
url = f'https://www.baidu.com/s?wd={quote(args1)}' 
# url = f'https://www.baidu.com/s?{urlencode(args2)}'
# 创建Request对象
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36'}
req = Request(url, headers=headers)
# 发送请求
resp = urlopen(req)
# 获取响应码
print(resp.getcode())
# 关闭连接
resp.close()

响应码为200即请求成功。

标签:传参,urlencode,wd,get,python,urllib,parse,url
From: https://www.cnblogs.com/qyly/p/18411268

相关文章

  • WPF 什么时候 VisualTreeHelper.GetDescendantBounds 将返回无穷大
    本文将和大家介绍在什么情况下WPF将会在调用VisualTreeHelper.GetDescendantBounds方法时,返回一个无穷大的范围尺寸在WPF的容器控件的里层元素的RenderTransform包含NaN将会导致对上层容器调用VisualTreeHelper.GetDescendantBounds返回无穷大返回的矩形范围是-∞,......
  • dotnet 测试在 Linux 系统上的 Environment.GetFolderPath 行为
    由于Environment.GetFolderPath可以传入的参数里面,有许多都是Windows系统特有的,在Linux上不存在的,也没有映射对应的文件夹。本文将在WSLDebian和UOS系统上测试Environment.GetFolderPath行为测试使用Environment.SpecialFolder的各个枚举获取路径的代码如下......
  • mysql_getshell的几种方法
    mysql_getshell一、mysql的--os-shell利用原理--os-shell就是使用udf提权获取WebShell。也是通过intooufile向服务器写入两个文件,一个可以直接执行系统命令,一个进行上传文件。此为sqlmap的一个命令,利用这条命令的先决条件:要求为数据库DBA,使用--is-dba查看当前网站连接的数......
  • urllib.request.Request对象封装请求
    一些服务器只允许普通浏览器的请求而不允许来自脚本的请求,可以使用urllib.request.Request对象封装请求头的信息(请求头需要以字典的形式封装)。urllib.request.Request(url,data=None,headers={},origin_req_host=None,unverifiable=False,method=None)headers字典的键值对......
  • OpenCV(cv::getStructuringElement())
    目录1.函数原型2.示例3.使用场景1.函数原型cv::getStructuringElement()是OpenCV中一个用于生成结构元素的函数,结构元素在形态学操作(如膨胀、腐蚀等)中扮演了重要角色。cv::Matcv::getStructuringElement(intshape,cv::Sizeksize,cv::Pointanchor=cv::Point(-1......
  • SOMEIP_ETS_105: SD_ClientServiceGetLastValueOfEventUDPUnicast
    测试目的:验证DUT在客户端服务模式下能够订阅事件组,接收UINT8UDP单播事件,并在触发clientServiceGetLastValueOfEventUDPUnicast方法后返回该事件的值。描述本测试用例旨在确保DUT能够在客户端服务模式下正确地处理订阅和单播事件接收流程,并且能够通过特定的方法返回最近......
  • 解决vue3 useRoute无法获取get参数记录
    总结:使用route.query无法获取到get参数,开发模式代码改动能拿到,但是刷新又没了,需要监听route.query才能拿到get参数。正文:我的常规使用方法:先安装vue-routernpminstallvue-router@next创建src/router/index.js:import{createRouter,createWebHistory}from'vue-rou......
  • QListWidget(IconMode)
    #include"widget.h"#include<QHBoxLayout>#include<QListWidgetItem>Widget::Widget(QWidget*parent):QWidget(parent){resize(600,400);p_ListWidget=newQListWidget(this);p_ListWidget->setViewMode(QListView::IconMode);......
  • QListWidget
    #include"widget.h"#include<QListWidgetItem>#include<QAction>#include<QDebug>Widget::Widget(QWidget*parent):QWidget(parent){resize(300,400);p_ListWidget=newQListWidget(this);p_ListWidget->setFixedWidth......
  • Leetcode 2453. Destroy Sequential Targets | rust 实现
    题解问题描述给定一个整数数组nums和一个整数space,我们需要找到一个目标值,使得该目标值在nums中的出现次数最多。如果有多个目标值出现次数相同,则返回最小的目标值。解题思路哈希表统计:使用哈希表map来统计每个seed%space的出现次数,题干中给出的等式等价为nums[n......