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中条件选择和循环语句使用方法介绍
Mar 13 Python
python自动化测试之从命令行运行测试用例with verbosity
Sep 28 Python
详解Python3操作Mongodb简明易懂教程
May 25 Python
PyCharm-错误-找不到指定文件python.exe的解决方法
Jul 01 Python
Python+pyplot绘制带文本标注的柱状图方法
Jul 08 Python
使用WingPro 7 设置Python路径的方法
Jul 24 Python
Django配置MySQL数据库的完整步骤
Sep 07 Python
python中的数组赋值与拷贝的区别详解
Nov 26 Python
kafka监控获取指定topic的消息总量示例
Dec 23 Python
python中format函数如何使用
Jun 22 Python
Django如何继承AbstractUser扩展字段
Nov 27 Python
python常见的占位符总结及用法
Jul 02 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
Server.HTMLEncode让代码在页面里显示为源代码
2013/12/08 PHP
用PHP代码在网页上生成图片
2015/07/01 PHP
PHP实现验证码校验功能
2017/11/16 PHP
php和html的区别点详细总结
2019/09/24 PHP
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
jquery jqPlot API 中文使用教程(非常强大的图表工具)
2011/08/15 Javascript
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
Underscore.js常用方法总结
2015/02/28 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
Angular.js中下拉框实现渲染html的方法
2017/06/18 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
vue实现表格过滤功能
2019/09/27 Javascript
JS实现横向轮播图(初级版)
2020/06/24 Javascript
vue中实现回车键登录功能
2020/02/19 Javascript
[01:14:12]2018DOTA2亚洲邀请赛4.7 总决赛 LGD vs Mineski 第二场
2018/04/09 DOTA
Python的迭代器和生成器
2015/07/29 Python
python微信跳一跳系列之棋子定位像素遍历
2018/02/26 Python
Python实现的本地文件搜索功能示例【测试可用】
2018/05/30 Python
Python除法之传统除法、Floor除法及真除法实例详解
2019/05/23 Python
如何使用python实现模拟鼠标点击
2020/01/06 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
python Zmail模块简介与使用示例
2020/12/19 Python
社区安全检查制度
2014/02/03 职场文书
《记承天寺夜游》教学反思
2014/02/16 职场文书
正风肃纪剖析材料
2014/02/18 职场文书
公司委托书范本
2014/04/04 职场文书
文明城市创建标语
2014/06/16 职场文书
求职教师自荐书
2014/06/19 职场文书
党支部活动策划方案
2014/08/18 职场文书
励志演讲稿600字
2014/08/21 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
2015年建筑工作总结报告
2015/05/04 职场文书
2015年国庆晚会主持词
2015/07/01 职场文书
Python软件包安装的三种常见方法
2022/07/07 Python