更新:关于requests连接次数太多出现的问题
在调用request.get()之前加上
requests.adapters.DEFAULT_RETRIES = 5
作用为重新发起连接次数
=========================================================================
-
requests库的安装,最简单的安装就是用操作平台。按Windows+R弹出窗口输入CMD后确定。按Python安装文件路径一直打开至pip输入install requests,再点击enter即可。
-
Requests库的方法
requests.request() #构造一个请求,支撑一下的方法的基础,小白我JIO得没啥用,如调用get
requests.request(get,url,**kwrags) #但我们通常直接调用get方法
requests.get(url) #获取HTML网页的主要方法,对应于HTTP的GET
requests.head(url) #获取HTML网页头信息的方法,对应于HTTP的HEAD
print(r.heads) #就可以展示其头部内容
requests.post(url,datas=‘lingjianhang’) #向HTML网页提交POST请求的方法,对应于HTTP的POST,可以添加列表和字典,数据
requests.put() #向HTML网页提交PUT请求的方法,对应于HTTP的PUT,和post相同,但是会把以前的内容覆盖掉
requests.patch() #向HTML网页提交局部修改请求,对应于HTTP的PATCH
requests.delete() #向HTML原页面提交删除请求,对应于HTTP的DELETE
第二和第三个是获取,第四个到第七个是对内容修改操作。
接下来再来记录下几个常用的**kwrags的参数
#params,将自己像添加搜索的内容添加到网址里面,比如用火狐搜牛奶,会弹出关于牛奶的内容,这个时候someWhat="伊利",那么内容就是关于伊利牛奶的。
someWhat="我真帅"
r=requests.request('GET','https://home.firefoxchina.cn/',params=someWhat)
#等于以下,只要这7个方法里有那个参数,就可以互相替换,功能是一样的。
r=requests.get('https://home.firefoxchina.cn/',params=someWhat)
#data和上面的params差不多,但是是加在爬取网址的内容上。
#json和data一样
#headers,伪装自己,把自己的爬虫变成一个游览器的身份去访问。
toutou={'user-agent':'Mozilla/5.0'}#伪装成火狐游览器
r=requests.request('POST',https://home.firefoxchina.cn/,headrs=toutou)
#这里有办法看自己的爬虫的user-agent
print(r.reqquest.headers)
HTTP协议中是url为链接的
url格式的是“http:host[:port][path]”
host:Internet主机域名或者IP地址
port:端口号,可省略,(80)
path:请求资源的路径
-
requests.get(url,paramas=None,**kwargs)方法。构造一个向服务器请求资源的Request的对象并返回一个包含服务器资源的Reapose对象,其中包含了所有内容。
url是需要爬取的网址
paramas是url中额外的参数,字典或者字节流格式(可选)
**kwargs是12个控制访问的参数 -
Response对象的方法。
import requests
r=requests.get(https://home.firefoxchina.cn/) #这里r就是Response创建的对象
r.status_code #获取请求的状态码,就是访问爬取页面成功与否,200即是成功的,404就是失败了
r.text #将内容变成文本形式
r.encoding #从http中的header中猜测响应的编码方式,常用的是UTF-8,gbk
r.apparent_encoding #比上面的更准确,他是从网页内容判断编码方式
r.content #响应内容的二进制形式,与r.text对应
在http中的header中不存在charset,则认为编码为ISO-8859-1。所以要解析内容就要在代码中添加r.encoding=r.apparent_encoding
- Requests库的异常
requests.ConnectionError #网络链接异常,拒绝连接
requests.HTTPError #HTTP错误异常
requests.URLRequired #URL缺失异常
requests.TooManyRedirects #超过最大重定向次数,产生重定向异常
requests.ConnectTimeout #连接远程服务器超时异常
requests.Timeout #请求URL异常,产生超时异常
第一次学就看到这么多异常感觉有点难看,其实有另一个简单判断异常
r.raise_for_status() #会自动返回状态码200否则引发HTTPError异常
这样就能只用一个try语句就能解决异常了,不用用一个变量名接受返回值,直接加入这行代码就行。
现在这里给出一个代码框架
import requests
def getUrlText(url):
try:
r=requests.get(url,timeout=30)
r.raise_for_status()
r.encoding=r.apparent_encoding
return r.text
except:
return("天啊,咋个会产生异常!")
if __name__ == '__main__':
url='https://home.firefoxchina.cn/'
print(getUrlText(url))