python爬虫 urllib模块url编码处理详解


Posted in Python onAugust 20, 2019

案例:爬取使用搜狗根据指定词条搜索到的页面数据(例如爬取词条为‘周杰伦'的页面数据)

import urllib.request
# 1.指定url
url = 'https://www.sogou.com/web?query=周杰伦'
'''
2.发起请求:使用urlopen函数对指定的url发起请求,
该函数返回一个响应对象,urlopen代表打开url
'''
response = urllib.request.urlopen(url=url)
# 3.获取响应对象中的页面数据:read函数可以获取响应对象中存储的页面数据(byte类型的数据值)
page_text = response.read()
# 4.持久化存储:将爬取的页面数据写入文件进行保存
with open("sougou.html","wb") as f:
  f.write(page_text)
  print("写入数据成功")
  f.close()

编码错误

【注意】上述代码中url存在非ascii编码的数据,则该url无效。如果对其发起请求,则会报如下错误:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 15-17: ordinal not in range(128)

url的特性:url不可以存在非ASCII编码字符数据,url必须为ASCII编码的数据值。所以我们在爬虫代码中编写url时,如果url中存在非ASCII编码的数据值,则必须对其进行ASCII编码后,该url方可被使用。

上面的“周杰伦” 不是ASCII编码字符数据,所以url就会变成无效的url,不符合url特性,所以报错误

所以必须对url中的非ascii的数据进行ascii的编码,则该url方可被发起请求:

需要用到 urllib.parse

方法 1:使用quote函数

quote函数作用:对url中所存在的特殊字符进行ASCII的编码,把url中的非ascii编码的字符单独取出来,使用quote函数进行转码,

转码之后,把转码的结果拼接到原有的url当中。

import urllib.request
import urllib.parse
# 1.指定url
url = 'https://www.sogou.com/web?query=周杰伦'
word = urllib.parse.quote("周杰伦")
# 查看转码后结果
print(word)
# %E5%91%A8%E6%9D%B0%E4%BC%A6
from urllib.request import urlopen
import urllib.parse
# 1.指定url
url = 'https://www.sogou.com/web?query='
# url的特性:url不可以存在非ASCII编码字符数据
word = urllib.parse.quote("周杰伦")
# 将编码后的数据值拼接回url中
url = url+word # 有效url
'''
2.发起请求:使用urlopen函数对指定的url发起请求,
该函数返回一个响应对象,urlopen代表打开url
'''
response = urlopen(url=url)
# 3.获取响应对象中的页面数据:read函数可以获取响应对象中存储的页面数据(byte类型的数据值)
page_text = response.read()
# 4.持久化存储:将爬取的页面数据写入文件进行保存
with open("周杰伦.html","wb") as f:
  f.write(page_text)
print("写入数据成功")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python支持断点续传的多线程下载示例
Jan 16 Python
在Python编程过程中用单元测试法调试代码的介绍
Apr 02 Python
详解Python中使用base64模块来处理base64编码的方法
Jul 01 Python
python 全局变量的import机制介绍
Sep 07 Python
Python实现简单的文本相似度分析操作详解
Jun 16 Python
django2用iframe标签完成网页内嵌播放b站视频功能
Jun 20 Python
使用Python实现正态分布、正态分布采样
Nov 20 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
Apr 07 Python
详解Python IO口多路复用
Jun 17 Python
在django中实现choices字段获取对应字段值
Jul 12 Python
python Matplotlib模块的使用
Sep 16 Python
python实现测试工具(一)——命令行发送get请求
Oct 19 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
Aug 20 #Python
python web框架 django wsgi原理解析
Aug 20 #Python
opencv转换颜色空间更改图片背景
Aug 20 #Python
pytorch 预训练层的使用方法
Aug 20 #Python
python爬虫 urllib模块反爬虫机制UA详解
Aug 20 #Python
Pytorch 抽取vgg各层并进行定制化处理的方法
Aug 20 #Python
python实现抠图给证件照换背景源码
Aug 20 #Python
You might like
PHP Token(令牌)设计
2008/03/15 PHP
DEFER怎么用?
2006/07/01 Javascript
地震发生中逃生十大法则
2008/05/12 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
防止浏览器记住用户名及密码的简单实用方法
2013/04/22 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
jQuery实现的纵向下拉菜单实例详解【附demo源码下载】
2016/07/09 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
BootStrap 模态框实现刷新网页并关闭功能
2017/01/04 Javascript
angular bootstrap timepicker TypeError提示怎么办
2017/06/13 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
AngularJS动态添加数据并删除的实例
2018/02/27 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
解决Python中字符串和数字拼接报错的方法
2016/10/23 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
2016/12/15 Python
python实现按任意键继续执行程序
2016/12/30 Python
python爬虫实战之爬取京东商城实例教程
2017/04/24 Python
解决django前后端分离csrf验证的问题
2019/02/03 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
pandas 时间格式转换的实现
2019/07/06 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
python绘图模块之利用turtle画图
2021/02/12 Python
CSS3的文字阴影—text-shadow的使用方法
2012/12/25 HTML / CSS
机电一体化大学生求职信
2013/11/08 职场文书
初中女生自我鉴定
2013/12/19 职场文书
岗位竞聘书范文
2014/03/31 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
承诺书格式
2014/06/03 职场文书
2014个人年终工作总结范文
2014/12/15 职场文书
好好学习保证书
2015/02/26 职场文书
2015年党总支工作总结
2015/05/25 职场文书
社团招新宣传语
2015/07/13 职场文书
开学第一周总结
2015/07/16 职场文书
CSS 鼠标点击拖拽效果的实现代码
2022/12/24 HTML / CSS