- urllib是python的内置的http请求库
- urllib常见函数
- urlopen返回对象提供方法
- urllib.parse.urlencode(dict)
- urllib.reuqest.ProxyHandler(dict)可以将字典里面的ip当做代理去设置。
- urllib.parse.urlparse(urlstring,scheme=’’,allow_fragments=true)
- urllib.request.urlretrieve(url,filename=None,reporthook=None,data=None)
- urllib.request.Request(url,data=none,header=none,origin_host=none,unverifiable=false,method=none)
- urllib.request.HTTPCookieProcessor()
- 异常处理
urllib是python的内置的http请求库
urllib.requests 请求模块
urllib.error 异常处理模块
urllib.parse url解析模块
urllib.robotparser robots.txt解析模块
urllib常见函数
urllib.requests.urlopen(url,data,timeout)
创建一个表示远程url的类文件对象,然后像本地文件一样操作这个类文件对象来获取远程数据。
urlopen返回对象提供方法
read()readline(),readlines(),fileneo(),close(),对HTTPResponse类型数据进行操作
把网站html源码进行读取
info()返回HTTPMessage对象,表示远程服务器返回的头的信息
getcode():返回http状态码
geturl():返回请求的url。
urllib.parse.urlencode(dict)
将dict或包含两字元素的元组列表装换成url参数。
例如{“name”=’’qingmo’’,”age”=’’22’’}转换成”name=qingmo||age=22”
https://baijiahao.baidu.com/s?id=1622594556284170797&wfr=spider%26for%3Dpc
将urlid=1622594556284170797&wfr=spider%26for%3Dpc拼接成dict = {‘id’:’1622594556284170797’,’wfr’:’spider&for=pc’}
urllib.reuqest.ProxyHandler(dict)可以将字典里面的ip当做代理去设置。
urllib.parse.urlparse(urlstring,scheme=’’,allow_fragments=true)
url解析函数的重点是将url字符串拆分为其组件,或者将url组件组合为一个url字符串。
urllib.request.urlretrieve(url,filename=None,reporthook=None,data=None)
urlretrieve()方法直接将远程数据下载到本地。
参数url为请求地址
参数filename指定保存本地路径,(如果参数未指定,urllib会生成一个临时文件保存数据)
参数reporthook是一个回调函数,当连接上服务器,以及相应的数据块传输完毕是会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。
参数data是指post到服务器的数据,该方法返回一个包含两个元素(filename,headers)的元组,filename表示保存的本地路径,header表示服务器的响应头。
import urllib.request
url="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F010d325b40df23a80121b9943080ad.jpg%401280w_1l_2o_100sh.jpg&refer=http%3A%2F%2Fimg.zcool.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1636620879&t=de74f3e0c1926698163b036a30bfc07b"
filename = 'd:\\杀生丸.jpg'
def call(a,b,c):
'''
:param a: 表示已下载的数据块
:param b: 表示数据块的数量
:param c: 表示总文件的大小
:return:
'''
d = 100 * a * b / c
if d>100:
d=100
else:
print("已经下载了:%.2f%%" %d)
res = urllib.request.urlretrieve(url,filename,call)#call为回调函数
urllib.request.Request(url,data=none,header=none,origin_host=none,unverifiable=false,method=none)
url :为访问地址
data:此参数为可选字段,其中传递的参数需要转为bytes,如果是字典我们需要通过urllib.parse.urlencode转换即可
headers:http相应的传递的信息,构造方法,headers参数传递,通过调用request对象的add_header()方法来添加请求头。
import urllib.request
url = 'https://www.baidu.com/'
headers= {
'http':'127.0.0.1:1007',
'https':'127.0.0.1:1007'
}
data = {
'name':'qingmo',
'age':'18'
}
res=urllib.request.Request(url,data=data,headers=headers)
urllib.request.HTTPCookieProcessor()
网站中通过cookie进行判断权限是很常见的。那么我们可以通过urllib.request.HTTPCookieProcessor(cookie)来操作cookie。使用cookie和使用代理ip一样也需要自己创建一个自己的opener。在http包中,提供了cookiejar模块,用于提供对cookie的支持。http。cookiejar功能强大,我们可以利用本模块的cookiejar类的对象来捕捉cookie并在后续链接请求时重新发送,比如可以实现模拟登录功能。该模块主要的对象有cookiejar,Filecookiejar,Mozillacookiejar,LWPCcookiefar
import http.cookiejar
import urllib.request
url = 'https://www.baidu.com/'
cookie = http.cookiejar.CookieJar()
#创造一个处理器传入cookie
header = urllib.request.HTTPCookieProcessor(cookie)
#创造一个发送器
opener = urllib.request.build_opener(header)
调用http的
r=opener.open(url)
for item in cookie:
print("cookie name ="+item.name+"cookie value ="+item.value)
异常处理
如果访问时间没有在这个时间范围内就会报错
报错的位置,报了一个通信异常
处理这个异常,导入通信的包
然后找到异常的包进行处理
import urllib.request
import socket,urllib.error
url = 'https://www.baidu.com'
try:
r = urllib.request.urlopen(url, timeout=0.0000001)
except urllib.error.URLError as e:
# 如果这个异常的原因是属于socket.timeout
if isinstance(e.reason,socket.timeout):
print('timeout!!!!!')