[快学Python3]HTTP处理 - urllib模块
时间:2022-05-07
本文章向大家介绍[快学Python3]HTTP处理 - urllib模块,主要内容包括urllib组成、爬取数据实例、基本功能实例、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
概述
urllib是python最基础、最核心的HTTP协议支持库,诸多第三方库都依赖urllib,所以urllib是必须掌握的HTTP库。
掌握了urllib有利于:
- 深入理解http协议
- 可以更好的学习和掌握第三方http库
- 快速的开展基于http的接口测试
- 快速进入爬虫学习之路
urllib组成
我们一起看下urllib由哪些模块或类构成:
- urllib.request 用于构建http请求
- urllib.response 用于处理http响应值的类
- urllib.parse 用于url处理
- urllib.error 用于错误处理
- urllib.robotparser 用于处理robot.txt文件
爬取数据实例
下面我们基于豆瓣网的API来看看代码实例
豆瓣网API网址:https://developers.douban.com/wiki/?title=guide
下面的实例演示了如何使用豆瓣网的API 进行数据爬取,从而演示urllib的强大能力。
请勿使用下述代码持续爬取数据
请勿使用下述代码持续爬取数据
请勿使用下述代码持续爬取数据
# -*- coding:utf-8 -*-
__author__ = '苦叶子'
import urllib.request
import csv
import codecs
if __name__ == "__main__":
print("urllib爬取豆瓣网数据示例")
print("搜索下关键字: Python")
url = "https://api.douban.com/v2/book/search?q=python"
response = urllib.request.urlopen(url)
# 将bytes数据流解码成string
ebook_str = response.read().decode()
# 将string转换成dict
ebook_dict = eval(ebook_str)
#print(ebook_dict)
#print(type(ebook_dict))
count = ebook_dict["count"]
total = ebook_dict["total"]
with codecs.open('books.csv', 'w', 'utf-8') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=',',
quotechar='|', quoting=csv.QUOTE_MINIMAL)
spamwriter.writerow(["书名", "作者", "描述", "出版社", "价格"])
# 写书信息
for book in ebook_dict["books"]:
spamwriter.writerow([book["title"],
",".join(book["author"]),
book["summary"],
book["publisher"],
book["price"]])
# 从第2页开始,获取其他书籍信息
# 这段代码采集了大量数据,容易被封IP,所以注释了
"""
for start in range(1, int(total / count) + 1):
url = "https://api.douban.com/v2/book/search?q=python&start=%d" % start
try:
response = urllib.request.urlopen(url)
except:
print("别老爬别人的数据,要爬也别太快,会被封IP的")
break
# 将bytes数据流解码成string
ebook_str = response.read().decode()
# 将string转换成dict
ebook_dict = eval(ebook_str)
# 输出书籍信息
for book in ebook_dict["books"]:
spamwriter.writerow([book["title"],
",".join(book["author"]),
book["summary"],
book["publisher"],
book["price"]])
"""
print("总计搜索了 %d 本书的信息" % total)
请勿使用上述代码持续爬取数据
请勿使用上述代码持续爬取数据
请勿使用上述代码持续爬取数据
对于其他的接口,这里就不再演示。
基本功能实例
下面我们演示下urllib基本功能实例,例如如何获取返回码等等基本信息。
# -*- coding:utf-8 -*-
__author__ = '苦叶子'
import urllib.request
if __name__ == "__main__":
print("urllib基本实例")
url = "http://www.baidu.com"
# 访问下百度
response = urllib.request.urlopen(url)
# 打印下状态码
print(response.status)
# 打印下状态码对应的可读性文字说明,例如在http协议里,200 对应 OK
print(response.reason)
# 打印下请求返回的header
print(response.headers)
# 打印下请求返回的数据
print(response.read().decode("utf-8"))
上述仅仅是urllib的基本功能,还有更强大的功能,我们后续再分享。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android圆角头像工具类详解
- Android实现系统消息推送
- Android仿微信QQ聊天顶起输入法不顶起标题栏的问题
- Android实现倒计时的按钮效果
- 腾讯位置服务实现轨迹回放
- 有一种遗憾,是跑程序却没用上_______
- Android使用注解代替枚举节省系统内存开销的方法
- Android实现自定义验证码输入框效果(实例代码)
- flutter 实现多布局列表的示例代码
- flutter TextField换行自适应的实现
- 如何造个android Flow流式响应的轮子
- Flutter混合开发详解
- Android 单双击实现的方法步骤
- Android多渠道打包时获取当前渠道的方法
- Flutter Dio二次封装的实现