当前位置: 首页 > news >正文

超详细讲解urllib库的使用

目录

一.urllib的作用

二.urllib库的模块

2.1发送请求

2.1.1 urlopen


一.urllib的作用

  1. 实现HTTP请求的发送

不需要关心HTTP协议本身甚至更底层的实现,我们要做的就是指定请求的URL、请求头、请求体等信息

      2.可以把服务器返回的响应转化为python对象

通过该对象便可以方便地获取响应的相关信息,如响应状态码、响应头、响应体等


注意:在python2中,有urllib和urllib2两个库来实现HTTP请求的发送。而Python3中,urllib2库已经不存在了,统一为urllib

二.urllib库的模块

urllib库使用方法:它是python内置的HTTP请求库,也就是说不需要额外安装,可直接使用

2.1发送请求

2.1.1 urlopen

urllib.request模块作用

  • 模拟浏览器的请求发起过程
  • 处理授权验证(Authentication)、重定向(Redirection)、浏览器Cookie以及其他一些功能

例:抓取python官网的HTML的源代码

import urllib.requestresponse = urllib.request.urlopen('https://www.python.org')
#1.打印python网页HTML的源代码
print(response.read().decode('utf-8'))  
#2.打印响应对象的类型
print(type(response))

运行结果如下:

type方法输出响应类型,响应的是一个HTTPResponse类型对象,主要包含read、readinto、getheader、getheaders、filemo等方法,以及msg、version、status、reason、debuglevel、closed属性。

得到响应后,把它赋值给response变量,然后就可以调用上述方法和属性,得到返回结果的一系列信息

import urllib.requestresponse = urllib.request.urlopen('https://www.python.org')
#3.打印响应对象的状态码
print(response.status)
#4.打印响应对象的响应头
print(response.getheaders())
#5.打印响应对象的响应头
print(response.getheader('Server'))
#6.打印响应对象的内容
print(response.read())
#7.打印响应对象内容
print(response.readinto())
#8.打印响应对象的文件描述符
print(response.fileno())

urlopen的API:

urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None)

参数说明:

1.data参数

data参数是可选的,在添加该参数时,需要使用bytes方法将参数转化为字节流编码格式的内容,即bytes类型

如果传递data参数,那么它的请求方式就不再是GET,而是POST

import urllib.parse
import urllib.requestdata = bytes(urllib.parse.urlencode({'name': 'yhy'}), encoding='utf-8')
response = urllib.request.urlopen('http://httpbin.org/post', data=data)
print(response.read().decode('utf-8'))

运行结果如下:

传递了一个参数name,值为yhy,需要将它转化为bytes类型。转码时采用bytes方法,该方法第一个参数时str(字符串)类型,因此用urllib.parse模块例urlencode方法将字典参数转化为字符串。

2.timeout参数

作用:用于设置超时时间,单位为秒,意思时如果请求超出了设置的这个时间,还没有响应,就会抛出异常。

如果不指定该参数,则会使用全局默认时间。

这个参数支持HTTP/HTTPS/FTP请求。

import urllib.parse
import urllib.requestresponse = urllib.request.urlopen('https://www.httpbin.org/get',timeout=0.1)
print(response.read())

运行结果如下:

设置超时时间为0.1s。程序运行0.1s后,服务器依然没有响应,于是抛出了URLError异常。

因此,可以通过设置这个超时时间,实现当一个网页长时间未响应时,就跳过对她的抓取。此外,利用try except语句也可以实现

http://www.dtcms.com/a/357597.html

相关文章:

  • 【C语言初阶】指针_野指针,指针运算
  • UCIE Specification详解(九)
  • 马斯克杀入AI编程!xAI新模型Grok Code Fast 1发布,深度评测:速度、价格与API上手指南
  • 数列寻方:等差数列和为完全平方数
  • Node.js汉字转拼音指南:pinyin-pro全解析
  • Llama-index学习文档
  • 使用leapp升级Linux
  • (一)Python语法基础(上)
  • MYSQL-索引(上)
  • 营业执照识别技术应用OCR与深度学习,实现高效、精准提取企业核心信息,推动数字化管理发展。
  • Android init 进程部分理论
  • 为什么外贸企业管理需要外贸CRM系统
  • Electron 进程模型:主进程与渲染进程详解
  • LDA(隐狄利克雷分配):主题模型的经典之作
  • ubuntu如何识别windows的USB设备(WSL2)
  • Shell 编程基础(续):流程控制与实践
  • RustDesk(跨平台远程桌面软件) v1.4.1 中文绿色版
  • 单节锂电池,升压至12V/2.5A的芯片选型指南(附FP5207X 与 FP7208参数表)
  • 【大模型14】Fine-tuning与大模型优化1
  • 基于深度学习的文本情感分析系统:从理论到实践的全栈实现
  • UPDF for mac PDF编辑器
  • 表达式语言EL
  • 【0422】SMgrRelationData 中 md_num_open_segs 和 md_seg_fds 数组为什么是 4 个元素? 第四个元素表示什么?
  • 【观成科技】蔓灵花User下载者加密通信分析
  • 第二阶段WinForm-10:多线程
  • 亚马逊竞品分析新思路——从数据迷雾到精准截流
  • C++模板类的详细介绍和使用指南
  • 财务RPA机器人——解读 377页RPA财务机器人开发与应用—基于UiPath StudioX【前三章 附全文阅读】
  • [UVM]编写一个验证vld和rdy握手的断言
  • 第5篇 c++ 函数的多返回值实现-返回多个值