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通过PIL获取图片主要颜色并和颜色库进行对比的方法
Mar 19 Python
python使用xlrd实现检索excel中某列含有指定字符串记录的方法
May 09 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
May 23 Python
Python读取mat文件,并转为csv文件的实例
Jul 04 Python
python退出命令是什么?详解python退出方法
Dec 10 Python
新手入门Python编程的8个实用建议
Jul 12 Python
解决python中导入win32com.client出错的问题
Jul 26 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
Aug 09 Python
使用Python的networkx绘制精美网络图教程
Nov 21 Python
Python实现企业微信机器人每天定时发消息实例
Feb 25 Python
python em算法的实现
Oct 03 Python
用python制作个音乐下载器
Jan 30 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
蝙蝠侠:侠影之谜
2020/03/04 欧美动漫
Adodb的十个实例(清晰版)
2006/12/31 PHP
php empty函数 使用说明
2009/08/10 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
在IE,Firefox,Safari,Chrome,Opera浏览器上调试javascript
2008/12/02 Javascript
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
2009/02/17 Javascript
js对象的比较
2011/02/26 Javascript
javascript中的onkeyup和onkeydown区别介绍
2013/04/28 Javascript
javascript基于HTML5 canvas制作画箭头组件
2014/06/25 Javascript
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
10个很棒的jQuery代码片段
2015/09/24 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
2016/11/18 Javascript
Angular2使用Augury来调试Angular2程序
2017/05/21 Javascript
nodejs初始化init的示例代码
2018/10/10 NodeJs
python通过正则查找微博@(at)用户的方法
2015/03/13 Python
Python 正则表达式实现计算器功能
2017/04/29 Python
浅谈python数据类型及类型转换
2017/12/18 Python
python实现redis三种cas事务操作
2017/12/19 Python
Jupyter中直接显示Matplotlib的图形方法
2018/05/24 Python
python生成密码字典的方法
2018/07/06 Python
python 文件查找及内容匹配方法
2018/10/25 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
python多线程实现代码(模拟银行服务操作流程)
2020/01/13 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
解决Keras 自定义层时遇到版本的问题
2020/06/16 Python
Python urlopen()参数代码示例解析
2020/12/10 Python
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
英国最受欢迎的平价女士时装零售商:Roman Originals
2019/11/02 全球购物
人力资源部培训专员岗位职责
2014/01/02 职场文书
外贸业务员工作职责
2014/01/06 职场文书
八年级音乐教学反思
2014/01/09 职场文书
2014党员四风对照检查材料思想汇报
2014/09/17 职场文书
教师党员自我剖析材料
2014/09/29 职场文书
不同意离婚代理词
2015/05/23 职场文书
羊脂球读书笔记
2015/06/30 职场文书
乡镇团代会开幕词
2016/03/04 职场文书