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遍历文件夹并删除特定格式文件的示例
Mar 05 Python
简析Python的闭包和装饰器
Feb 26 Python
python 实时遍历日志文件
Apr 12 Python
Python获取当前路径实现代码
May 08 Python
Python爬虫天气预报实例详解(小白入门)
Jan 24 Python
python求质数的3种方法
Sep 28 Python
浅谈python的输入输出,注释,基本数据类型
Apr 02 Python
Falsk 与 Django 过滤器的使用与区别详解
Jun 04 Python
python3的print()函数的用法图文讲解
Jul 16 Python
django使用haystack调用Elasticsearch实现索引搜索
Jul 24 Python
keras打印loss对权重的导数方式
Jun 10 Python
基于python实现判断字符串是否数字算法
Jul 10 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
Terran兵种介绍
2020/03/14 星际争霸
dede全站URL静态化改造[070414更正]
2007/04/17 PHP
Linux环境下搭建php开发环境的操作步骤
2013/06/17 PHP
memcache一致性hash的php实现方法
2015/03/05 PHP
php-msf源码详解
2017/12/25 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
javascript初学者常用技巧
2014/09/02 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
2019/04/30 Javascript
Layui实现带查询条件的分页
2019/07/27 Javascript
详解Howler.js Web音频播放终极解决方案
2020/08/23 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
python处理大数字的方法
2015/05/27 Python
详解JavaScript编程中的window与window.screen对象
2015/10/26 Python
Collatz 序列、逗号代码、字符图网格实例
2017/06/22 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
2018/12/17 Python
浅谈python requests 的put, post 请求参数的问题
2019/01/02 Python
使用python打印十行杨辉三角过程详解
2019/07/10 Python
python 普通克里金(Kriging)法的实现
2019/12/19 Python
Python request中文乱码问题解决方案
2020/09/17 Python
Jones New York官网:美国女装品牌,受白领女性欢迎
2019/11/26 全球购物
年度考核自我鉴定
2013/11/09 职场文书
2014基层党员干部学习全国两会心得体会
2014/03/17 职场文书
经销商订货会主持词
2014/03/27 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
导游词之云南-元阳梯田
2019/10/08 职场文书
导游词之南迦巴瓦峰
2019/11/19 职场文书
html实现弹窗的实例
2021/06/09 HTML / CSS