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打开文件并获取文件相关属性的方法
Apr 23 Python
Python中文字符串截取问题
Jun 15 Python
浅析Python编写函数装饰器
Mar 18 Python
python的paramiko模块实现远程控制和传输示例
Oct 13 Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 Python
实例讲解Python爬取网页数据
Jul 08 Python
Flask Web开发入门之文件上传(八)
Aug 17 Python
python提取具有某种特定字符串的行数据方法
Dec 11 Python
python爬虫之快速对js内容进行破解
Jul 09 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
Mar 30 Python
python对一个数向上取整的实例方法
Jun 18 Python
Python约瑟夫生者死者小游戏实例讲解
Jan 04 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
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
2019/10/10 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
2021/03/04 PHP
Gambit vs CL BO3 第二场 2.13
2021/03/10 DOTA
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
利用javaScript实现点击输入框弹出窗体选择信息
2013/12/11 Javascript
JS中捕获console.log()输出的方法
2015/04/16 Javascript
浅谈JavaScript异常处理语句
2015/06/26 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
微信小程序-横向滑动scroll-view隐藏滚动条
2017/04/20 Javascript
js 毫秒转天时分秒的实例
2017/11/17 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
Python中的高级数据结构详解
2015/03/27 Python
在Python的web框架中编写创建日志的程序的教程
2015/04/30 Python
python利用装饰器进行运算的实例分析
2015/08/04 Python
Python使用sorted排序的方法小结
2017/07/28 Python
分分钟入门python语言
2018/03/20 Python
python中join()方法介绍
2018/10/11 Python
pow在python中的含义及用法
2019/07/11 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
python实现在多维数组中挑选符合条件的全部元素
2019/11/26 Python
Numpy将二维数组添加到空数组的实现
2019/12/05 Python
Python各种扩展名区别点整理
2020/02/27 Python
matplotlib交互式数据光标实现(mplcursors)
2021/01/13 Python
Jar包的作用是什么
2014/03/30 面试题
小学生优秀评语大全
2014/04/22 职场文书
爱心捐助倡议书
2014/05/19 职场文书
自强自立美德少年事迹材料
2014/08/16 职场文书
求职简历自我评价2015
2015/03/10 职场文书
护士长2015年终工作总结
2015/04/24 职场文书
python获取字符串中的email
2022/03/31 Python
ICOM R71E和R72E图文对比解说
2022/04/07 无线电