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的Django框架中创建和使用模版
Jul 15 Python
举例讲解Python面向对象编程中类的继承
Jun 17 Python
python 全文检索引擎详解
Apr 25 Python
Django实现组合搜索的方法示例
Jan 23 Python
Python中的asyncio代码详解
Jun 10 Python
python定时任务 sched模块用法实例
Nov 04 Python
Python 简单计算要求形状面积的实例
Jan 18 Python
python数据分析:关键字提取方式
Feb 24 Python
Python文件读写w+和r+区别解析
Mar 26 Python
音频处理 windows10下python三方库librosa安装教程
Jun 20 Python
Python+Opencv身份证号码区域提取及识别实现
Aug 25 Python
Python中itertools库的四个函数介绍
Apr 06 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内存释放以及垃圾回收
2018/03/29 PHP
nodejs教程之入门
2014/11/21 NodeJs
js实现精美的图片跟随鼠标效果实例
2015/05/16 Javascript
js小数运算出现多位小数如何解决
2015/10/08 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
零基础轻松学JavaScript闭包
2016/12/30 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
2017/02/14 Javascript
jquery实现自适应banner焦点图
2017/02/16 Javascript
ReactJs实现树形结构的数据显示的组件的示例
2017/08/18 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
vue下使用nginx刷新页面404的问题解决
2019/08/02 Javascript
springboot+vue实现文件上传下载
2020/11/17 Vue.js
Python常用正则表达式符号浅析
2014/08/13 Python
Python实现冒泡,插入,选择排序简单实例
2014/08/18 Python
优化Python代码使其加快作用域内的查找
2015/03/30 Python
Python编程之多态用法实例详解
2015/05/19 Python
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
安装Python的教程-Windows
2017/07/22 Python
Python多层装饰器用法实例分析
2018/02/09 Python
django认证系统实现自定义权限管理的方法
2018/07/16 Python
python将类似json的数据存储到MySQL中的实例
2019/07/12 Python
Python实现基于SVM的分类器的方法
2019/07/19 Python
python修改文件内容的3种方法详解
2019/11/15 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
Hertz荷兰:荷兰和全球租车
2018/01/07 全球购物
澳大利亚购买健身器材网站:Gym Direct
2019/12/19 全球购物
在校生钳工实习自我鉴定
2013/09/19 职场文书
零件设计自荐信范文
2013/11/27 职场文书
自主招生自荐信指南
2014/02/04 职场文书
老兵退伍标语
2014/10/07 职场文书
失职检讨书大全
2015/01/26 职场文书
诚信考试承诺书范文
2015/04/29 职场文书
给原生html中添加水印遮罩层的实现示例
2021/04/02 Javascript
你喜欢篮球吗?Python实现篮球游戏
2021/06/11 Python