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 15 Python
在Python中使用mechanize模块模拟浏览器功能
May 05 Python
Django的session中对于用户验证的支持
Jul 23 Python
Python自定义主从分布式架构实例分析
Sep 19 Python
在Python程序员面试中被问的最多的10道题
Dec 05 Python
基于Python的文件类型和字符串详解
Dec 21 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
Dec 20 Python
python批量获取html内body内容的实例
Jan 02 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
Feb 21 Python
后端开发使用pycharm的技巧(推荐)
Mar 27 Python
Django中FilePathField字段的用法
May 21 Python
Python matplotlib绘制雷达图
Apr 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
phpmyadmin的#1251问题
2006/11/25 PHP
php使用curl打开https网站的方法
2015/06/17 PHP
php实现Session存储到Redis
2015/11/11 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
2015/12/18 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
php while循环控制的简单实例
2016/05/30 PHP
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
js 弹出框只弹一次(二次修改之后的)
2013/11/26 Javascript
Google (Local) Search API的简单使用介绍
2013/11/28 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
深入理解Vue transition源码分析
2017/07/30 Javascript
vue实现全选和反选功能
2017/08/31 Javascript
JavaScript防止全局变量污染的方法总结
2018/08/02 Javascript
layui实现下拉框三级联动
2019/07/26 Javascript
微信小程序手动添加收货地址省市区联动
2020/05/18 Javascript
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
python中迭代器(iterator)用法实例分析
2015/04/29 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
利用python将pdf输出为txt的实例讲解
2018/04/23 Python
numpy中的delete删除数组整行和整列的实例
2018/05/09 Python
Django中的用户身份验证示例详解
2019/08/07 Python
Python操作redis和mongoDB的方法
2019/12/19 Python
python网络编程:socketserver的基本使用方法实例分析
2020/04/09 Python
python中可以声明变量类型吗
2020/06/18 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
2020/11/24 Python
英国Office鞋店德国网站:在线购买鞋子、靴子和运动鞋
2018/12/19 全球购物
应届生法律求职信
2013/10/22 职场文书
房屋改造计划书
2014/01/10 职场文书
小学开学典礼主持词
2014/03/19 职场文书
《李广射虎》教学反思
2014/04/27 职场文书
环境监测与治理技术专业求职信
2014/07/06 职场文书
销售目标责任书
2014/07/23 职场文书
2015年实习单位评语
2015/03/25 职场文书
2015年学校保卫部工作总结
2015/05/11 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书
如何使JavaScript休眠或等待
2021/04/27 Javascript