urllib.request 库使用

声明:本博客为个人学习笔记,只记录自己觉得易忽略的知识点;如有错漏,请私信我。

urllib.request 库使用

request 它是最基本的 HTTP 请求模块,可以用来模拟发送请求。 就像在浏览器里输入网址然后回车一样。
parse 是一个工具模块,提供了许多 URL 处理方法,比如拆分、解析、合并等。

import urllib.parse as pa
import urllib.request as re
url="http://httpbin.org/"	#是一个实验网站
url_post="http://httpbin.org/post"
  • get

urllib request 模块提供了最基本的构造 HTTP 求的方法urlopen(), 利用它可以模拟浏览器的一个请求发起过程, 同时它还带有处理授权验证(authenticaton)、重定向(redirection)、浏览器 Cookies 及其他内容。

one = re.urlopen( url )		#one是一个 HTTPResposne类型的对象<class ’ http.client.HTTPResponse ’ >
print(one.read().decode("utf-8")) #打印一个网页的html源码
  • post

    data 参数是可选的,如果要添加该参数并且需要是字节流编码格式的内容,即 bytes 类型。需要通过 bytes()方法转化,如果传递了这个参数,则它的请求方式就不再是 GET 方式。

#post请求可包含登录信息、cookies等,数据通常以表单的形式传输
data =bytes(pa.urlencode({"he":"she"}),encoding="utf-8")#urlencode()方法来将参数字典转化为字符串
two = re.urlopen(url_post,data)
print(two.read().decode("utf-8"))

url_Request

  • Request

    如果请求中需要加入 Headers 等信息,就可以利用更强大的 Request 类来构建。

    class urllib. request. Request ( url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

    origin_req_host 指的是请求方的 host 名称或者 IP 地址。

    unverifiable表示这个请求是否是无法验证的,默认是 False。为Ture的意思是用户没有足够权限来选择接收这个请求的结果。

data =bytes(pa.urlencode({"he":"she"}),encoding="utf-8")
headers={"User-Agent":"""Mozilla/5.0 (Windows NT 10.0; Win64; x64) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"""}
#模拟浏览器发给服务器的头部信息
threeR=re.Request(url=url_post,data=data,headers=headers,method="POST")
"""是一个请求对象(Request)不可直接three.read()
  报错为AttributeError: 'Request' object has no attribute 'read'"""
three=re.urlopen(threeR)
print(three.read().decode("utf-8"))
#另外,headers也可以用add_header()方法来添加:
threeR.add_header('User-Agent':"""Mozilla/5.0 (Windows NT 10.0; Win64; x64) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36""") 

url_Request

HTTPResposne 类型的对象,主要包含 read()、 readinto()、 getheader(name)、 getheaders() 、fileno()等方法,以及 msg、 version、 status、 reason、 debuglevel、 closed 等属性。

 four=re.urlopen("https://y.qq.com/")
 print(four.status)  #状态码, 如报错urllib.error.HTTPError: HTTP Error 418: 被识别为爬虫,404 代表网页未找到
 print(four.getheaders(      ))  #返回头部信息
 print(four.getheader ('Date'))  #返回指定的一个头部信息

url_headers

import urllib.error
#超时处理
try:
    three =re.urlopen("https://y.qq.com/",timeout= 0.01)
    print(three.read().decode("utf-8"))
except urllib.error.URLError as e:
    print("time out")
运行结果如下:
time out 

对于一些更高级的操作(比如 Cookies 处理、代理设置等),可以查阅 Handler、OpenerDirector类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值