首页 > 其他分享 >爬虫_057_urllib get请求的quote方法

爬虫_057_urllib get请求的quote方法

时间:2024-02-12 20:44:22浏览次数:32  
标签:编码 字符 URL quote get urllib ASCII 周杰伦

目录

引子

image-20240212192414080

将百度搜索周杰伦的地址栏地址,复制到pycharm当中变成下面的样子:

image-20240212192500906

https://www.baidu.com/s?wd=%E5%91%A8%E6%9D%B0%E4%BC%A6

编码集的演变

image-20240212192540704

  • ASCII编码:一个字符一个字节
  • 中国:GB2312
  • 日本:Shift_JIS
  • 韩国:Euc-kr
  • Unicode:大一统
    • 周杰伦三个字变成了%E5%91%A8%E6%9D%B0%E4%BC%A6
    • 这是Unicode编码

需求

获取https://www.baidu.com/s?wd=周杰伦网页的源码。

image-20240212194014094

我们直接去请求的时候,就出现了上面的错误。

这个错误叫做:UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-12: ordinal not in range(128)

为什么会出现这个错误呢?

这是因为有一个事实,我们没有认识到。

这个事实是什么?

这个事实是,URL当中的字符,注意,我说的是字符,必须都是ASCII码表当中的字符。

换一种更加准确的说法是,URL当中必须是ASCII字符串。

URL标准(RFC3986)最初是为ASCII字符设计的。

那么我们想要在URL当中放置非ASCII编码的字符怎么办呢?

例如上面的例子当中,我们想要放置周杰伦

我们应该怎么办呢?

我们需要使用的方式是:百分号编码(percent-encoding)


什么是百分号编码呢?

这是一种将非ASCII编码字符转换为ASCII字符串的方法。

周杰伦三个字的UTF-8编码是:

  • 周: E5 91 A8
  • 杰: E6 9D B0
  • 伦: E4 BB AA

所以,周杰伦三个字的UTF-8编码连接起来是:E591A8E69DB0E4BBAA

使用百分号编码了之后,就变成了%E5%91%A8%E6%9D%B0%E4%BB%AA

这个东西,每一个字符都是在ASCII表当中的,可以称之为ASCII字符串

这个ASCII字符串,就可以放置在URL当中了。

知识点

通过将非ASCII字符转换为百分号编码的形式,确保了URL路径中的每个字符都在ASCII字符表中的范围内。

这样可以确保URL可以正确传输和处理,而不会引起歧义或错误解析。

重新测试

将url当中的周杰伦三个字,换成百分号编码后的ASCII字符串,这样就成功了。

image-20240212202910542

get请求方式的quote方法

image-20240212203225657

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://www.baidu.com/s?wd='
name = urllib.parse.quote('周杰伦')
url = url + name
request = urllib.request.Request(url=url, headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
print(content)

image-20240212203244736

标签:编码,字符,URL,quote,get,urllib,ASCII,周杰伦
From: https://www.cnblogs.com/gnuzsx/p/18014111

相关文章

  • 爬虫_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......
  • 【.NET】聊聊 IChangeToken 接口
    由于两个月的奋战,导致很久没更新了。就是上回老周说的那个产线和机械手搬货的项目,好不容易等到工厂放假了,我就偷偷乐了。当然也过年了,老周先给大伙伴们拜年了,P话不多讲,就祝大家身体健康、生活愉快。其实生活和健康是密不可分的,想活得好,就得健康。包括身体健康、思想健康、心理健康......
  • SharePoint Online 列表的 Audience Targeting
    前言最近,碰到一个需求,用户希望列表的视图,不被管理员以外的任何人看到,这样数据会更加安全。正文1.这时候,我们就需要用到列表的AudienceTargeting功能了,我们首先要去到列表设置,如下图:2.进去以后启用列表的AudienceTargeting,如下图:3.我们去到列表视......
  • Sliver C2 实战 vulntarget-f
    ‍网络拓扑hostip1ip2ubuntu(自用)192.168.130.14/centos192.168.130.310.0.10.2ubuntu110.0.10.310.0.20.2ubuntu210.0.20.3/‍信息收集开放了很多端口,优先从web入手。​​fscan过一遍网站指纹,发现可能可以利用xxe。​​‍zimbracmk​......
  • NuGetForUnity用不了时的一个折衷方案
    如果NuGetForUnity网络访问不了或者下载速度非常慢,导致无法正常使用,那可以试试下面的方法。 1)先用vs的NuGet包管理器下载,vs下貌似没遇到网络问题,下载很快 注意,vs不是下载在Unity的Assets文件夹下的,而是和他同层级,所以此时Unity并不会加载所下载的dll文件的 2)然后......
  • PowerShell 的 Get-FileHash 命令查询一个文件的所有上述哈希值(假设是 SHA256, MD5, S
    PowerShell是一种跨平台的任务自动化解决方案,包含一个命令行外壳、脚本语言和配置管理框架。PowerShell提供了用于计算文件哈希值的内置命令Get-FileHash。Get-FileHash命令可以用来计算文件的哈希值,支持多种哈希算法。,Get-FileHash支持以下几种哈希算法:SHA256:默认算法,提......
  • 初中英语优秀范文100篇-081An unforgettable experience-一次难忘的经历
    PDF格式公众号回复关键字:SHCZFW081记忆树1Howtimeflies!翻译时间过得真快啊简化记忆时间句子结构"How"在这里作为感叹词,用来引导感叹句,表达强烈的情感或惊讶主语"time"它代表时间的概念谓语"flies"是动词"fly"的第三人称单数形式,用于与单数主语"time"......