urllib

url的异常错误处理:

URLerror产生的主要原因:

  • 没有网络连接
  • 服务器连接失败
  • 找不到指定的服务器

HTTPError:
有三个属性:

  • code:返回HTTP的状态码
  • reason:返回错误原因
  • headers:返回请求头

下面是常见的HTTP状态码:

  • 200 - 请求成功
  • 301 - 资源(网页等)被永久转移到其它URL
  • 302 - 资源(网页等)被临时转移到其它URL
  • 401 - 未授权
  • 403 - 禁止访问
  • 408 - 请求超时
  • 404 - 请求的资源(网页等)不存在
  • 500 - 内部服务器错误
  • 503 - 服务器不可用
什么是urllib

Urllib是python内置的HTTP请求库
包括以下模块:

  • urllib.request 请求模块
  • urllib.parse url解析模块
  • urlopen
简单的自定义opener()
import urllib.request

# 构建一个HTTPHandler 处理器对象,支持处理HTTP请求
http_handler = urllib.request.HTTPHandler()

# 构建一个HTTPHandler 处理器对象,支持处理HTTPS请求
# http_handler = urllib.request.HTTPSHandler()

# 调用urllib.request.build_opener()方法,创建支持处理HTTP请求的opener对象
opener = urllib.request.build_opener(http_handler)

# 构建 Request请求
request = urllib.request.Request("http://www.baidu.com/")

# 调用自定义opener对象的open()方法,发送request请求
response = opener.open(request)

# 获取服务器响应内容
print (response.read().decode())
代理:

原理:其实是发送了请求给Web服务器,Web服务器把响应传回给我们。

import urllib.request
import random

proxy_list = [
    {"https" : "124.88.67.81:80"},
    {"https" : "124.88.67.81:80"},
    {"https" : "124.88.67.81:80"},
    {"https" : "124.88.67.81:80"},
    {"https" : "124.88.67.81:80"}
]

# 随机选择一个代理
proxy = random.choice(proxy_list)

# 使用选代理构建代理处理器对象
proxy_handler = request.ProxyHandler(
    proxies=proxy
)

#根据proxy_handler实例化一个opener对象
opener = request.build_opener(proxy_handler)

url = 'http://www.baidu.com/'

try:
    response = opener.open(url,timeout=5)
    print(response.status)
except error.HTTPError as err:
    print(err.reason)
except error.URLError as err:
    print(err.reason)

但是,这些免费开放代理一般会有很多人都在使用,而且代理有寿命短,速度慢,匿名度不高,HTTP/HTTPS支持不稳定等缺点(免费没好货)。

你可能感兴趣的:(urllib)