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 19 Python
Python在线运行代码助手
Jul 15 Python
Python内置函数OCT详解
Nov 09 Python
详解Python3除法之真除法、截断除法和下取整对比
May 23 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
python 函数的缺省参数使用注意事项分析
Sep 17 Python
Python字典深浅拷贝与循环方式方法详解
Feb 09 Python
Python3 shelve对象持久存储原理详解
Mar 23 Python
keras做CNN的训练误差loss的下降操作
Jun 22 Python
简单了解python关键字global nonlocal区别
Sep 21 Python
Python实现Kerberos用户的增删改查操作
Dec 14 Python
Python 绘制多因子柱状图
May 11 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中实现可以返回多个值的函数实例
2015/03/21 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
用javascript实现的激活输入框后隐藏初始内容
2007/06/29 Javascript
比较简单的一个符合web标准的JS调用flash方法
2007/11/29 Javascript
prototype 中文参数乱码解决方案
2009/11/09 Javascript
jQuery帮助之CSS尺寸(五)outerHeight、outerWidth
2009/11/14 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
JavaScript中使用arguments获得函数传参个数实例
2014/08/27 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
2015/12/04 Javascript
JavaScript添加随滚动条滚动窗体的方法
2016/02/23 Javascript
nodejs 的 session 简单使用
2016/06/06 NodeJs
js 轮播效果实例分享
2016/12/28 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
使用NestJS开发Node.js应用的方法
2018/12/03 Javascript
帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)
2019/08/23 Javascript
微信小程序实现点击按钮后修改颜色
2019/12/05 Javascript
javascript实现点击小图显示大图
2020/11/29 Javascript
Python lambda和Python def区别分析
2014/11/30 Python
Python操作CouchDB数据库简单示例
2015/03/10 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
详解pandas中iloc, loc和ix的区别和联系
2020/03/09 Python
HTML5之SVG 2D入门2—图形绘制(基本形状)介绍及使用
2013/01/30 HTML / CSS
美国著名首饰网站:BaubleBar
2016/08/29 全球购物
预订奥兰多和佛罗里达州公园门票:FloridaTix
2018/01/03 全球购物
荷兰手表网站:Watch2Day
2018/07/02 全球购物
eBay英国购物网站:eBay.co.uk
2019/06/19 全球购物
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
进程的查看和调度分别使用什么命令
2013/12/14 面试题
如何利用cmp命令比较文件
2016/04/11 面试题
医科大学生的自我评价
2013/12/04 职场文书
总裁办公室主任职责
2014/01/02 职场文书
考察邀请函范文
2015/01/31 职场文书
刑事附带民事代理词
2015/05/25 职场文书
Vue实现导入Excel功能步骤详解
2021/07/03 Vue.js
Android Gradle 插件自定义Plugin实现注意事项
2022/06/16 Java/Android