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查询Mysql时返回字典结构的代码
Jun 18 Python
python使用rabbitmq实现网络爬虫示例
Feb 20 Python
利用aardio给python编写图形界面
Aug 21 Python
Python使用matplotlib绘制余弦的散点图示例
Mar 14 Python
Python 数值区间处理_对interval 库的快速入门详解
Nov 16 Python
python提取具有某种特定字符串的行数据方法
Dec 11 Python
python实现的MySQL增删改查操作实例小结
Dec 19 Python
Python如何使用k-means方法将列表中相似的句子归类
Aug 08 Python
手把手教你pycharm专业版安装破解教程(linux版)
Sep 26 Python
Python 脚本的三种执行方式小结
Dec 21 Python
Python ATM功能实现代码实例
Mar 19 Python
django xadmin action兼容自定义model权限教程
Mar 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
与文件上传有关的php配置参数总结
2013/06/14 PHP
浅析ThinkPHP的模板输出功能
2014/07/01 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
禁止ajax缓存获取程序最新数据的方法
2013/11/19 Javascript
Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
2015/10/25 Javascript
js禁止表单重复提交
2017/08/29 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
2018/02/26 Javascript
微信小程序实现星级评分和展示
2018/07/05 Javascript
LayUI动态设置checkbox不显示的解决方法
2019/09/02 Javascript
element el-table表格的二次封装实现(附表格高度自适应)
2021/01/19 Javascript
python3.3实现乘法表示例
2014/02/07 Python
python网络编程学习笔记(五):socket的一些补充
2014/06/09 Python
Python实现抓取页面上链接的简单爬虫分享
2015/01/21 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
python如何实现反向迭代
2018/03/20 Python
python列表,字典,元组简单用法示例
2019/07/11 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
基于python实现微信好友数据分析(简单)
2020/02/16 Python
Python中使用socks5设置全局代理的方法示例
2020/04/15 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
2020/06/03 Python
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
html5 canvas 画图教程案例分析
2012/11/23 HTML / CSS
HTML5 新标签全部总汇(推荐)
2016/06/13 HTML / CSS
经典c++面试题六
2012/01/18 面试题
星空联盟C# .net笔试题
2014/12/05 面试题
营销总经理的岗位职责
2013/12/15 职场文书
委托公证书样本
2015/01/23 职场文书
幽灵公主观后感
2015/06/09 职场文书
2015暑假打工实践报告
2015/07/13 职场文书
MySQL常见优化方案汇总
2022/01/18 MySQL
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB
mysql sql常用语句大全
2022/06/21 MySQL