接口测试 | urllib篇 19 urllib基本示例
时间:2022-05-07
本文章向大家介绍接口测试 | urllib篇 19 urllib基本示例,主要内容包括实例、小结、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
概述
本章就要就urllib中parse、request模块的重点API进行说明,也是以后大家最常用到的API。
- 本文不会列举所有的API。
- 本文以实例方式演示说明API,即直接上代码
实例
- 先看一个基本的实例:
#-*- coding:utf-8 -*-
__author__ = "苦叶子"
import urllib.parse
import urllib.request
if __name__ == "__main__":
print("urllib API实例演示说明")
# 访问百度首页
response=urllib.request.urlopen('http://www.baidu.com')
# 打印下首页是html源码
# 获取完整的响应内容,便于断言其中的特定值
html=response.read()
print(html)
# 打印下http header信息
# 有时候我们需要提前header值来用于下一个请求
header = response.info()
print(header)
# 获取下状态码 http响应的status code
# 接口测试的一个断言,就是断言状态码
status_code = response.getcode()
print(status_code)
# 打印下本次请求的目标url
url = response.geturl()
print(url)
- 下面我们基本的爬虫实例
我们尝试爬取下博客园首页的一些链接。
注意:需要用到前基础篇html.parser模块相关是技术
#-*- coding:utf-8 -*-
__author__ = "苦叶子"
import urllib.parse
import urllib.request
from html.parser import HTMLParser
class BlogHTMLParser(HTMLParser):
data = []
data_key = ""
def __init__(self):
HTMLParser.__init__(self)
self.is_a = False
def handle_starttag(self, tag, attrs):
# 处理开始为a的标签
if tag == "a":
self.is_a = True
for name,value in attrs:
if name == "href":
# 提取a的href属性值
self.data_key = value
def handle_data(self, data):
# 处理结束为a的标签
if self.is_a and self.lasttag == "a":
# 将a标签的href属性值作为key, a的文本作为data构建字典
self.data.append({self.data_key : data})
def handle_endtag(self, tag):
# 处理a结束标签
if self.is_a and self.lasttag == "a":
self.is_a = False
def get_data(self):
# 返回所有从a中提取到的目标数据
return self.data
if __name__ == "__main__":
print("urllib爬取博客园首页实例演示说明")
url = "https://www.cnblogs.com/"
# 访问首页
response = urllib.request.urlopen(url)
# 获取首页的html
data = response.read().decode(encoding="utf-8")
# 提取所有的链接
blogHtmlParser = BlogHTMLParser()
blogHtmlParser.feed(data)
links = blogHtmlParser.get_data()
print(links)
小结
在做爬虫的一些基础研究、学习时,建议能多多使用urllib,加深、加强对http的理解和掌握。
- 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 数组属性和方法
- springmvc使用DELETE|PUT请求
- Mybatis缓存相关的知识
- 「2020最新」Spring最易学习教程—第一个Spring程序
- idea背景图片及简化插件
- 「2020最新」Spring最易学习教程—IOC 以及 整合Struts2
- SpringBoot整合Mybatis增删改查
- JavaWeb之Maven
- Mirages主题帮助文档
- Java作业-租车小系统
- 「2020最新」Spring最易学习教程 3— 代理设计模式 Spring AOP 动态代理原理
- 初入Mybatis:简介及配置
- Java多线程安全问题
- ajax、axios、fetch三者之间
- Spring Boot项目 Build 不生效的问题
- java多线程概念及实现方式