urllib库(一)request模块:urlopen(),Request() 实现 get/post,urlretrieve() 下载网页文件,ProxyHandler()设置代理

本文介绍了Python3内置的urllib库,重点讲解了urllib.request模块的urlopen()、Request()如何实现GET和POST请求,以及urlretrieve()用于下载网页文件的方法。同时,还详细阐述了如何利用ProxyHandler()设置HTTP代理,以应对网络访问限制。
摘要由CSDN通过智能技术生成

一、urllib库

python3内置的urllib库不需要安装直接import导入

                             该库中主要模块有
模块 含义 功能
urllib.request 请求模块 打开和读取URL
urllib.parse 解析模块 解析和处理URL
urllib.response 响应模块
urllib.error 异常处理模块 包含了urllib.request产生的异常
urllib.robotparse 解析页面的robots.txt
>>> help(urllib)
Help on package urllib:

NAME
    urllib

PACKAGE CONTENTS
    error
    parse
    request
    response
    robotparser

FILE
    d:\360downloads\python\lib\urllib\__init__.py

二、urllib.requset

(1)urlopen(),Request() 实现 get,post

>>> import urllib
>>> help(urllib.urlopen)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'urllib' has no attribute 'urlopen'
>>> help(urllib.request.urlopen)
Help on function urlopen in module urllib.request:

所有和网络请求有关的方法都集到了urllib库下面的request模块
注意直接import urllib不能访问到urllib.urlopen

应该是import urllib.request 或from urllib import request
同时要注意这两种导入在调用时的区别 前者要写模块名,后者不写直接调用

1、两种方法使用内置urllib库实现get简单实例


方法一:urllib.request.urlopen()函数实现get

urlopen函数定义
urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
	url:需要打开的网址 str类型或者urllib.request.Request对象类型
	data:Post提交的数据,没有这个参数时实现的是get方法/get请求不需要传入data参数
		 Post的数据必须是bytes或者iterable of bytes,不能是str,
		 如果是str需要进行bytesstr,encoding)
		 如果是字典需要用urllib.parse模块里urlencode()编码
		 具体编码方法见后文post实现


	timeout:设置网站的访问超时时间

urllib.request.urlopen()返回'http.client.HTTPResponse'对象
可通过该对象的方法获取某些数据信息和响应信息如
	(1)f.read(size)/f.readline()/f.readlines() 
		读取的数据是字节型bytes
		可调用bytes.decode()方法进行解码转成str类型 如data.decode('utf-8')
		bytes对象常用方法见后文
	(2)f.geturl()/f.url 获取请求的url  #https://www.baidu.com
	(3)f.getcode() 获取本次请求的HTTP响应状态码  #200
	(4)f.getheaders():表示远程服务器返回的头部全部信息,
		以列表形式返回,每一个列表元素又是一个有两个元素的元组,分别构成key-value
	(5)f.getheader(name):获取响应报头中name字段的值 
	(6)f.info():以字典形式返回HTTPMessage对象,表示远程服务器返回的头信息
	(7)f.fileno()/f.close() :对HTTPResponse类型数据进行操作
	具体可通过dir(object),help(object)查看其方法、属性和函数定义

import urllib.request
# 构建GET请求
f = urllib.request.urlopen("https://www.baidu.com")
data=f.read()
print(data.decode('utf-8'))
	
>>> type(f)
<class 'http.client.HTTPResponse'>
>>>type(data)
<class 'bytes'>
方法二:urllib.request.Request()实现get

urllib.request.Request类定义
class Request(builtins.object)
 |  Request(url, data=None, headers={
   }, origin_req_host=None, 
 			unverifiable=False, method=None)
 	对比urllib.request.urlopen()方法可以看到urllib.request.Request方法中含有
 	参数列表
 		(0)url 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值