一、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('爬取失败')

 

posted on 2020-02-06 10:18  小和尚不吃素  阅读(537)  评论(0编辑  收藏  举报