一、requests.get(url,parama=None,**kwargs)
url:拟获取页面的url链接
parma:url中的额外参数,字典或字典流格式,可选
**kwargs:12个控制访问参数
二、Response对象属性
r.status_code: http请求的返回状态,200表示连接成功,404表示失败(除了200外都是属于失败的)
r.text: http相应内容的字符串形式,即,URL对应的页面内容
r.encoding: 从HTTP hradet 中猜测的相应内容编码方式
r.apparent_encoding: 从内容中分析出的相应内容编码方式(备选编码方式)
r.content: HTTP响应内容的二进制形式
注意:r.encoding:如果header中不存在charset,则认为编码为ISO-8859-1
r.apparent_encoding:根据网页内容分析出的编码方式
三、理解Request库的异常
requests.ConnectioError: 网络连接错误异常,如dns查询失败、拒绝连接等
requests.HTTPError: HTTP错误异常
requests.URLRequired: URL缺失异常
requests.TooManyRedirects: 超过最大重定向次数,产生重定向异常
requests.ConnectTimeout: 连接远程服务器超时异常
requests.Timeout: 请求URL超时,产生超时异常
r.raise_for_status() 如果不是200,产生异常request.HTTPError
四、Request库的7个主要方法
1、request.request() 构造一个请求,支撑一下各方法的基础方法
requests.get(method,url,**kwargs)
①method:请求方法,对应get/put/post等7种
②url:拟获取页面的URL链接
③**kwargs:控制访问参数,共13个
params:字典或字节序列,作为参数增加到URL中
kw = {'key1':'value1' , 'key2':'value2'} r = requests.request('GET','http://python123.io/ws',params=kv) print(r.url)
data:字典、字节序列或者文件对象,作为Request的内容
kw={'key1':'value1','key2':'value2'} r=requests.request('POST','http://python123.io/ws',data=kw) body='注册内容' r=requests.request('POST','http://python123.io/ws',data=body)
json:JOSN格式的数据,作为Request的内容
kv={'key1':'value1','key2':'value2'} r=requests.request('POST','http://python123.io/ws',json=kv)
headers:字典,http定制头
hd={'user_agent':'chram/10'} r=requests.request('POST','http://python123.io/ws',haders=hd)
cookie:字典或Cookiejar,Request中的cookie
auth:元祖,支持HTTP认证功能
files:字典类型,传输文件,向某个链接提交某个文件
fs={'file':open('data,xls','rb')} r=requests.request('POST','http://python123.io/ws',files=fs)
timeout:设定超时时间,以秒为单位
r=requests.request('GET','http://python123.io/ws',timeout=10)
proxies:字典类型,设定访问的代理服务器,可以增加登陆认证
pxs={'http:'http://user:pass@10.10.10.1:1234' 'https':'https://10.10.10.1:4321'} r=requests.request('GET','http:www.baidu.com',proxies=pxs)
allow_redirects:True/False,默认为True,重定向开关
stream:True/False,默认为True,获取内容立即下载开关
verify:True/False,默认为True,认证SSL证书开关
cert:本地SSL证书路径
2、requests.get() 获取HTML网页的主要方法,对应HTTP的get
3、requests.head() 获取HTML网页头信息的方法,对应于HTTP的head
4、requests.post() 向HTML网页提交post请求的方法,对应于HTTP的post
requests.post(url,data=None,json=None,**kwargs)
5、requests.put() 向HTML网页提交put请求的方法,对应于HTTP的put
6、requests.patch() 想HTTP网页提交局部修改请求,对应于HTTP的patch
7、requests.delete() 向HTTP页面提交删除请求,对应于HTTP的delete
五、HTTP协议
1、HTTP,超文本传输协议。
①HTTP是基于‘请求与响应’模式的、无状态的应用层协议。
②HTTP协议采用URL作为定位网络资源的标识。
③URL格式:http://host[:port][path]
host:合法的Internet主机域名或IP地址
post:端口号,默认端口好为80
path:请求资源的路径
④HTTP URL的理解:
URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源
六、HTTP协议对资源的操作
GET 请求获取URL位置的资源
HEAD 请求获取URL位置资源的响应报告,即获得该资源的头部信息
POST 请求向URL位置的资源后附加新的数据
PUT 请求向URL位置储存的一个资源,覆盖原URL位置的资源
PATCH 请求局部更新URL位置的资源,即改变该处资源的部分内容
DELETE 请求删除URL位置存储的资源
七、案例
1 import requests 2 import os 3 4 url='https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1580967300997&di=2238943a2e9fbebde4de06e2a3b0951d&imgtype=0&src=http%3A%2F%2Fn.sinaimg.cn%2Fsinacn15%2F275%2Fw640h435%2F20181010%2Fcaba-hkrzvkw4936632.jpg' 5 hd ={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'} 6 file_name = './' 7 file = file_name+url.split('cn')[-1] 8 try: 9 r = requests.get(url,headers=hd,verify=False) #关闭SSL证书 10 r.raise_for_status() 11 # print(r.status_code) 12 # print(r.text) 13 #判断文件是否存在,如果文件不存在则创建该文件,如果文件存在则不创建文件 14 if not os.path.exists(file): 15 with open(file,'wb') as f: 16 f.write(r.content) #保存文件 17 f.close() 18 print('文件保存成功') 19 20 else: 21 print('文件已经存在!') 22 except: 23 print('url访问报错')
1 import requests 2 3 url = 'http://www.ip138.com/iplookup.asp?ip=' 4 hd ={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'} 5 ip_address = {'ip':'117.25.45.192'} 6 7 try: 8 r = requests.get(url+'159.226.8.6',headers=hd) 9 # print(r.encoding) 10 r.encoding = r.apparent_encoding #转换编码方式为内容分析出的相应编码方式 11 # print(r.status_code) 12 r.raise_for_status() 13 print(r.text) 14 except: 15 print('爬取失败')