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 08 Python
Python使用struct处理二进制的实例详解
Sep 11 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
浅谈python下tiff图像的读取和保存方法
Dec 04 Python
python二维码操作:对QRCode和MyQR入门详解
Jun 24 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
Aug 24 Python
python+requests接口压力测试500次,查看响应时间的实例
Apr 30 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
Jun 04 Python
python 字符串格式化的示例
Sep 21 Python
Python 删除List元素的三种方法remove、pop、del
Nov 16 Python
聊聊python在linux下与windows下导入模块的区别说明
Mar 03 Python
python3中apply函数和lambda函数的使用详解
Feb 28 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
回答PHPCHINA上的几个问题:URL映射
2007/02/14 PHP
PHP通用分页类page.php[仿google分页]
2008/08/31 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
PHP转换文件夹下所有文件编码的实现代码
2013/06/06 PHP
php弹出对话框实现重定向代码
2014/01/23 PHP
PHP循环结构实例讲解
2014/02/10 PHP
简单了解PHP编程中数组的指针的使用
2015/11/30 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
2019/10/18 PHP
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
Javascript setInterval的两种调用方法(实例讲解)
2013/11/29 Javascript
日常收藏的jquery技巧
2015/12/02 Javascript
Wireshark基本介绍和学习TCP三次握手
2016/08/15 Javascript
手机Web APP如何实现分享多平台功能
2016/08/19 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
浅析bootstrap原理及优缺点
2017/03/19 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
2018/09/25 Javascript
Python实现方便使用的级联进度信息实例
2015/05/05 Python
在类Unix系统上开始Python3编程入门
2015/08/20 Python
浅谈Python中函数的参数传递
2016/06/21 Python
Python中turtle作图示例
2017/11/15 Python
Python实现的ftp服务器功能详解【附源码下载】
2019/06/26 Python
俄罗斯园林植物网上商店:Garshinka
2020/07/16 全球购物
护士自我鉴定怎么写
2014/02/07 职场文书
道德大讲堂实施方案
2014/05/14 职场文书
判缓刑人员个人思想汇报
2014/10/10 职场文书
教师党的群众路线教育实践活动个人整改措施
2014/11/04 职场文书
大学辅导员述职报告
2015/01/10 职场文书
金正昆讲礼仪观后感
2015/06/11 职场文书
六五普法心得体会2016
2016/01/21 职场文书
《敬重卑微》读后感3篇
2019/11/26 职场文书
多表查询、事务、DCL
2021/04/05 MySQL
python3读取文件指定行的三种方法
2021/05/24 Python
JavaScript中isPrototypeOf函数
2021/11/07 Javascript
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android