win10下python3.9的代理报错问题解决(附web3的polygon爬虫源码)
2023-01-19 14:03 第二个卿老师 阅读(330) 评论(0) 收藏 举报背景
因为工作中经常需要代理访问,而开了代理,request就会报错SSLError,如下:
requests.exceptions.SSLError: HTTPSConnectionPool(host='test-admin.xxx.cn', port=443): Max retries exceeded with url: /xxx/xxx/xxx (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1123)')))
具体原因是python自身的 urllib 库没有正确配置 HTTPS 代理,参考链接(我本地环境是win10,python3.9)
如何解决
当然最简单的方式是手动关闭代理,如何开着代理也ok呢,如下所示
proxies = {"http": None, "https": 'http://127.0.0.1:7890'} # 设置本地代理
res = requests.get(url=self.url, params=self.params, proxies=proxies)
附:polygon爬虫源码
import math
import requests
from bs4 import BeautifulSoup
class Polygon():
url = 'https://polygonscan.com/txs'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'
}
var_trans_list = []
def __init__(self):
global mian_address, proxies
mian_address = '0x4C59739D4B43cc9b8C81d959F93e4cfD69736244' # input("请输入账号地址:")
proxies = {"http": None, "https": 'http://127.0.0.1:7890'} # 设置本地代理
self.params = {
'a': mian_address
}
self.res = ''
page = self.is_paging()
if page>1:
print(f'共有{page}页数据')
for p in range(1, page+1):
self.params = {
'a': mian_address,
'p': p
}
print(f'正在获取第{p}页。。。')
self.find_data()
else:
self.find_data()
print(f'全部数据共{len(self.var_trans_list)}条,为{self.var_trans_list}')
# 调用接口获取源数据
def catch_polygon(self):
self.res = requests.get(url=self.url, params=self.params, proxies=proxies)
if self.res.status_code == 200:
res_utf8 = self.res.content.decode("utf-8")
self.res_html = BeautifulSoup(res_utf8, 'html.parser')
else:
print('抓取页面失败')
# 是否存在分页
def is_paging(self):
self.catch_polygon()
new_reslut = self.res_html.find(class_='mb-2 mb-md-0')
if new_reslut:
list = new_reslut.text.split(' ')
if int(list[3]) >= 0:
print(f"一共查询到{list[3]}条数据")
return math.ceil((int(list[3])+1)/50)
# 过滤匹配数据
def find_data(self):
list2 = []
self.catch_polygon()
new_reslut = self.res_html.find(class_='table table-hover').find_all('tr')
for i in new_reslut:
list = []
for j in i:
if j.text:
list.append(j.text)
list2.append(list)
if list2:
list2 = list2[1:] # 去除第一行无效数据
print(f"当页共{len(list2)}条数据")
self.var_trans_list.extend(list2)
else:
print('没有查询到数据')
if __name__ == '__main__':
Polygon()
浙公网安备 33010602011771号