通用代码框架及HTTP协议

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39227338/article/details/79888767

点击打开链接

对之前内容的总结和复习

import requests
r = requests.get("http://www.baidu.com")
print(r.status_code)
print(r.headers)
print(r.text)
print(r.encoding)   #从header里猜测编码
print(r.apparent_encoding)    #从内容中分析出响应内容编码方式(备选编码方式)(解析中文)
r.encoding = 'utf-8'
print(r.text)
print(r.content)   #二进制表示

异常处理

对于网页信息获取过程中,我发现一个新的问题:如果在输入网页时没有加上“http://”就会显示错误,所以能够联想到异常处理。

用requests库获得url的相关内容,不一定能连接成功,异常处理很重要。

requests.ConnectionError
#网络连接错误异常,如DNS查询失败,拒绝连接等
requests.HTTPError
#HTTP错误异常
requests.URLRequired
#URL缺失异常
requests.TooManyRedirects
#超过最大重定向次数,产生重定向异常(经常指对一些复杂的连接会出现的错误)
requests.ConnectTimeout
#连接远程服务器超时异常
requests.Timeout
#请求URL超时,产生超时异常(从发出请求到获得整个过程超时)


在运行中可以判断 r 的返回状态(response类型)是否为200

r.raise_for_status()


对于网页信息获取我们可以总结出一种固定的框架

import requests
def getHTMLText(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 = "http://www.baidu.com"
    print(getHTMLText(url))

如果把倒数第二行改成 url = "www.baidu.com",结果就会显示异常。

try中先获取了url并且限制了时间,判断连接是否成功为200,由于是中文网页,可以使用备选编码方式解析中文,最后如果整个过程中都是可以通信完成的,就直接返回html网页的所以内容。


注:关于__name__的用法:

        1. 如果模块是被导入,__name__的值为模块名字

        2. 如果模块是被直接执行,__name__的值为’__main__’


关于HTTP协议

URL格式 http://host[:port][path]
host:合法的Internet主机域名或IP地址
port:端口号,缺省端口为80

path:请求资源路径


HTTP协议对资源的操作

GET     请求获取Request-URI所标识的资源
POST    在Request-URI所标识的资源后附加新的数据
HEAD    请求获取由Request-URI所标识的资源的响应消息报头
PUT     请求服务器存储一个资源,并用Request-URI作为其标识
DELETE  请求服务器删除Request-URI所标识的资源
PATCH   请求局部更新URL位置的资源,即改变该处资源的部分内容






阅读更多
换一批

没有更多推荐了,返回首页