目录
1.获取代理 IP
2.设置代理 IP
3. 检测代理 IP 的有效性
4. 处理异常
proxies = {
'http': 'http://127.0.0.1:8070',
'https': 'https://10.10.1.10:1080',
}
import requests
import random
# 代理 IP 地址的列表
proxy_list = [
{"http" : "http://101.200.127.149:3129"},
{"http" : "http://59.55.162.4:3256"},
{"http" : "http://180.122.147.76:3000"},
{"http" : "http://114.230.107.102:3256"},
{"http" : "http://121.230.211.163:3256"}
]
base_url = 'http://erabbit.itheima.net/#/'
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64'
'AppleWebKit/537.36 (KHTML, like Gecko)'
'Chrome/90.0.4430.212 Safari/537.36'}
# 发送 GET 请求,将 proxy_list 中任意一个 IP 地址设为代理
response = requests.get(base_url, headers=header,
proxies= random.choice(proxy_list))
print(response.status_code)
header请求头字段可以在网页按F12键,上方找到网络标识,然后点击下方有一个名称点进去,右边窗口下面就有User-Agent字段。
200
import requests
proxy_list = [
{"http" : "http://101.200.127.149:3129"},
{"http" : "http://59.55.162.4:3256"},
{"http" : "http://180.122.147.76:3000"},
{"http" : "http://114.230.107.102:3256"},
{"http" : "http://121.230.211.163:3256"}
]
base_url = 'http://erabbit.itheima.net/#/'
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64'
'AppleWebKit/537.36 (KHTML, like Gecko)'
'Chrome/90.0.4430.212 Safari/537.36'}
# 遍历代理 IP
for per_ip in proxy_list.copy():
try:
# 发送 GET 请求,将获取的每个 IP 地址设置为代理
response = requests.get(base_url, headers=header,
proxies=per_ip, timeout=3)
except:
# 失败则输出 IP 地址无效,并将该 IP 地址从 proxy_list 列表中移除
print(f'IP 地址:{per_ip.get("http")}无效')
proxy_list.remove(per_ip)
else:
# 成功则输出 IP 地址有效
print(f'IP 地址:{per_ip.get("http")}有效')
IP 地址:http://101.200.127.149:3129 有效
IP 地址:http://59.55.162.4:3256 无效
IP 地址:http://180.122.147.76:3000 无效
IP 地址:http://114.230.107.102:3256 无效
IP 地址:http://121.230.211.163:3256 有效
表 3-2 中罗列了一些常见的异常类型。其中,Timeout 继承自 RequestException,Connect Timeout 和 ReadTimeout 继承自 Timeout。 为保证程序能够正常终止,我们可以使用 try-except 语句捕获相应的异常,并对异常进行 相应的处理。 由于谷歌网站服务器的原因,访问该网站必定会出现连接超时的问题。下面以访问谷歌 网站为例,为大家演示如何使用 try-except 语句捕获 RequestException 异常,具体代码如下。
1 import time
2 import requests
3 # 记录请求的发起时间
4 print(time.strftime('开始时间:%Y-%m-%d %H:%M:%S'))
5 # 捕获 RequestException 异常
6 try:
7 html_str = requests.get('http://www.google.com').text
8 print('访问成功')
9 except requests.exceptions.RequestException as error:
10 print(error)
11 # 记录请求的终止时间
12 print(time.strftime('结束时间:%Y-%m-%d %H:%M:%S'))
开始时间:2021-06-16 13:50:53
HTTPConnectionPool(host='www.google.com', port=80): Max retries exceeded with url:
/ (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10060] 由于连接方
在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。'))
结束时间:2021-06-16 13:51:14
# 发送 GET 请求,设置超时时长
html_str = requests.get('http://www.google.com', timeout=5).text
再次运行代码,输出如下结果。
开始时间:2021-06-16 14:30:01
HTTPConnectionPool(host='www.google.com', port=80): Max retries exceeded with url:
/ (Caused by ConnectTimeoutError(, 'Connection to www.google.com timed out. (connect timeout=5)'))
结束时间:2021-06-16 14:30:06