目录
一、编码的由来
二、使用urllib.parse的quote方法
我在百度搜索‘胡彦斌’,结果为:
现在我想通过urllib来获取该页面的源码,正常来说,是把地址栏(https://www,baidu.com/s?wd=胡彦斌)复制到url中,但是当我们正在执行时,会发现复制过来的并不是汉字:
url='https://www.baidu.com/s?wd=%E8%83%A1%E5%BD%A6%E6%96%8C'
这是因为它自动帮我们转成了Unicode编码,通过这个url会正确地获取页面源码。
代码:
import urllib.request
#使用https方式进行请求,会遇到UA反爬
url='https://www.baidu.com/s?wd=%E8%83%A1%E5%BD%A6%E6%96%8C'
# 将UA存储在字典中
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0'
}
# 将url和headers定制成一个request对象
request = urllib.request.Request(url=url,headers=headers)
# 使用urlopen方法得到页面内容
response = urllib.request.urlopen(request)
# 读取页面源码,并转成正确的格式
content = response.read().decode('utf-8')
print(content)
运行结果(联网状态下运行):
但是如果我们使用url='https://www.baidu.com/s?wd=胡彦斌‘,就不行,因为ascii识别不了汉字,所以我们需要把'胡彦斌'通过unicode标准转成ascii。
首先我们需要用到urllib.parse,所以先导入
import urllib.parse
然后使用quote方法,将’胡彦斌‘转成Unicode字符,在将其与url拼接
url='https://www.baidu.com/s?wd='
name= urllib.parse.quote('胡彦斌')
url = url + name
完整代码:
import urllib.request
import urllib.parse
#使用https方式进行请求,会遇到UA反爬
url='https://www.baidu.com/s?wd='
name= urllib.parse.quote('胡彦斌')
url = url + name
print(url)
# 将UA存储在字典中
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0'
}
# 将url和headers定制成一个request对象
request = urllib.request.Request(url=url,headers=headers)
# 使用urlopen方法得到页面内容
response = urllib.request.urlopen(request)
# 读取页面源码,并转成正确的格式
content = response.read().decode('utf-8')
print(content)