该篇文章, 主要介绍了几个urllib中常用的类函数。
urllib
是一个收集了多个用到 URL 的模块的包, 是python标准库的一员
urllib.request
打开和读取 URLurllib.error
包含 urllib.request
抛出的异常urllib.parse
用于解析 URLurllib.robotparser
用于解析 robots.txt
文件urllib.request
模块定义了适用于在各种复杂情况下打开 URL(主要为 HTTP)的函数和类 — 例如基本认证、摘要认证、重定向、cookies 及其它。
urllib.request.urlopen(url,...)
, 打开url指定的资源, url可以是字符串也可以是urllib.request.Request对象, 返回一个http.client.response对象
urllib.request.``build_opener([handler, ...])
返回一个OpenerDirector实体
class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
这个类是一个对URL 请求的抽象
class urllib.request.OpenerDirector
该类通过连接在一起的BaseHandlers
打开url。它管理handlers链和从错误中恢复。
OpenerDirector实例的open(url, data=None[, timeout])
方法, 打开一个url。它的返回值和引起的异常和urllib.request.urlopen()一样。
class urllib.request.ProxyHandler
(proxies=None)
通过代理发出请求, 如果proxies参数被给与, 它必须是一个字典(从协议到IP映射的字典)
urllib.parse.urlencode(query,...)
将mapping object
或包含str或bytes对象的二元组的序列转换为百分比编码的ASCII文本字符串。
最简单的一个示例
# -*- coding:utf-8 -*-
from urllib import request
url = "http://www.baidu.com"
#打开url对应的资源 返回一个响应对象,类型为http.client.http.client.HTTPResponse
resp = request.urlopen(url)
#read()方法返回字节串
r_content = resp.read()
#解码
r_text = r_content.decode("utf-8")
print(r_text)
对于一些网站可能会通过请求头,进行反爬虫的限制。所以可以通过要Resquest对象, 设置headers, 示例如下。
# -*- coding:utf-8 -*-
# urllib 是一个收集了多个用到URL的模块包, 是python标准库中的一员
from urllib import request
import urllib.response
url = "https://tieba.baidu.com/f"
header = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36",
}
resp = request.urlopen(request.Request(url, headers=header)) # 打开指定url的资源, 可以是url可以是字符串也可以是urllib.request.Request对象, 返回一个http.client.HTTPResponse对象
r_content = resp.read() #读取响应的实体内容, 返回的是bytes型
r_text = r_content.decode("utf-8") #解码成utf-8
print(type(resp)) #打印出resp的类型
print(resp.version) #打印http协议版本
print(resp.status) # 状态码
print(resp.url) #打印url
print(resp.headers) #响应消息头
print(r_text) #打印实体内容
对于带有中文请求参数的url , 需要用到urllib.parse模板
# -*- coding:utf-8 -*-
# urllib 是一个收集了多个用到URL的模块包, 是python标准库中的一员
from urllib import request
from urllib import parse
url = "https://tieba.baidu.com/f"
data = {
"kw":"北京"
}
data_string = parse.urlencode(data)
new_url = url+"?"+data_string
resp = request.urlopen(new_url)
text_content = resp.read().decode("utf-8")
with open("tieba.html", "w", encoding="utf-8") as fp:
fp.write(text_content)s
代理设置 一篇讲解设置代理的文章
from urllib import request
url = "https://www.runoob.com/w3cnote/python-pip-install-usage.html"
header = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134'
}
req = request.Request(url, headers=header)
#实例一个代理处理的类, 参数是一个字典(字典是,协议到IP的映射)
Ip = request.ProxyHandler({
'http':'118.187.58.34:53281',
})
#获取一个OpenerDirector对象
opener = request.build_opener(Ip,request.HTTPHandler)
#打开被给于的url, 返回的值或异常 与urllib.request.urlopen()方法一样
resp = opener.open(req)
text = resp.read().decode('utf-8')
print(text[:500])