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中调用ggplot的三种方法
Apr 08 Python
Python使用django获取用户IP地址的方法
May 11 Python
python实现unicode转中文及转换默认编码的方法
Apr 29 Python
基于Django框架利用Ajax实现点赞功能实例代码
Aug 19 Python
Python中对数组集进行按行打乱shuffle的方法
Nov 08 Python
python列表list保留顺序去重的实例
Dec 14 Python
python实现一行输入多个值和一行输出多个值的例子
Jul 16 Python
Python使用random模块生成随机数操作实例详解
Sep 17 Python
使用python创建生成动态链接库dll的方法
May 09 Python
Ubuntu权限不足无法创建文件夹解决方案
Nov 14 Python
python操作toml文件的示例代码
Nov 27 Python
详解pytorch创建tensor函数
Mar 22 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
ThinkPHP文件上传实例教程
2014/08/22 PHP
Windows 下安装 swoole 图文教程(php)
2017/06/05 PHP
PHP中PCRE正则解析代码详解
2019/04/26 PHP
详解PHP PDO简单教程
2019/05/28 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
2020/01/02 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
Javascript的并行运算实现代码
2010/11/19 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
js获取时间(本周、本季度、本月..)
2013/11/22 Javascript
编写高效jQuery代码的4个原则和5个技巧
2014/04/24 Javascript
深入探究使JavaScript动画流畅的一些方法
2015/06/30 Javascript
分享几种比较简单实用的JavaScript tabel切换
2015/12/31 Javascript
angularjs表格分页功能详解
2016/01/21 Javascript
关于JavaScript中事件绑定的方法总结
2016/10/26 Javascript
Node.JS利用PhantomJs抓取网页入门教程
2017/05/19 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
JavaScript模块详解
2017/12/18 Javascript
Angular Material Icon使用详解
2018/11/07 Javascript
Angular PWA使用的Demo示例
2019/01/31 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
2019/09/02 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
基于Cesium绘制抛物弧线
2020/11/18 Javascript
python为tornado添加recaptcha验证码功能
2014/02/26 Python
python实现发送邮件功能
2017/07/22 Python
对python以16进制打印字节数组的方法详解
2019/01/24 Python
python中下标和切片的使用方法解析
2019/08/27 Python
python飞机大战pygame游戏框架搭建操作详解
2019/12/17 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
HTML5本地存储之Web Storage详解
2016/07/04 HTML / CSS
html5调用app分享功能示例(WebViewJavascriptBridge)
2018/03/21 HTML / CSS
英国女性时尚鞋类的潮流制造者:Koi Footwear
2018/10/19 全球购物
酒店前台辞职书
2015/02/26 职场文书
学会感恩主题班会
2015/08/12 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书
利用Python实现Picgo图床工具
2021/11/23 Python