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 正则式使用心得
May 07 Python
python定时执行指定函数的方法
May 27 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
Apr 13 Python
Python 关于反射和类的特殊成员方法
Sep 14 Python
Python集中化管理平台Ansible介绍与YAML简介
Jun 12 Python
用pycharm开发django项目示例代码
Jun 13 Python
Python 异步协程函数原理及实例详解
Nov 13 Python
Python:二维列表下标互换方式(矩阵转置)
Dec 02 Python
Python开发之基于模板匹配的信用卡数字识别功能
Jan 13 Python
pytorch-RNN进行回归曲线预测方式
Jan 14 Python
Python自定义sorted排序实现方法详解
Sep 18 Python
python+flask编写一个简单的登录接口
Nov 13 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
967 个函式
2006/10/09 PHP
Php Image Resize图片大小调整的函数代码
2011/01/17 PHP
php切割页面div内容的实现代码分享
2012/07/31 PHP
set_exception_handler函数在ThinkPHP中的用法
2014/10/31 PHP
php实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
php7下的filesize函数
2019/09/30 PHP
用javascript实现读取txt文档的脚本
2007/07/20 Javascript
JavaScript 乱码问题
2009/08/06 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
jQuery中关于ScrollableGridPlugin.js(固定表头)插件的使用逐步解析
2014/07/17 Javascript
js分页工具实例
2015/01/28 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
详解BootStrap中Affix控件的使用及保持布局的美观的方法
2016/07/08 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
详解vue实现坐标拾取器功能示例
2020/11/18 Vue.js
python转换摩斯密码示例
2014/02/16 Python
python发送邮件功能实现代码
2016/07/15 Python
Python在cmd上打印彩色文字实现过程详解
2019/08/07 Python
Pycharm无法打开双击没反应的问题及解决方案
2020/08/17 Python
新学期校长寄语
2014/01/18 职场文书
户外拓展活动方案
2014/02/11 职场文书
室内拓展活动方案
2014/02/13 职场文书
民族团结好少年事迹材料
2014/08/19 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
2014年镇党建工作汇报材料
2014/11/02 职场文书
储备店长岗位职责
2015/04/14 职场文书
python学习之panda数据分析核心支持库
2021/05/07 Python
Java 超详细讲解数据结构中的堆的应用
2022/04/02 Java/Android
JS前端监控采集用户行为的N种姿势
2022/07/23 Javascript