本文主要是介绍网络爬虫设置代理服务器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
1.获取代理 IP
2.设置代理 IP
3. 检测代理 IP 的有效性
4. 处理异常
如果希望在网络爬虫程序中使用代理服务器,就需要为网络爬虫程序设置代理服务器。
1.获取代理 IP
2.设置代理 IP
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
3. 检测代理 IP 的有效性
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 有效
4. 处理异常
表 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('<urllib3.connection.HTTPConnection object at
0x00000000034D6790>: 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(<urllib3.connection.HTTPConnection object at
0x00000000033E23D0>, 'Connection to www.google.com timed out. (connect timeout=5)'))
结束时间:2021-06-16 14:30:06
这篇关于网络爬虫设置代理服务器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!