ci: 更新环境变量获取逻辑并优化代码格式

- 在 config.py 中添加了对环境变量的空值检查
- 更新了 Dockerfile 中的环境变量设置
-优化了 proxy_pool.py 和 spiders.py 中的代码格式
- 修复了部分代码中的小问题
This commit is contained in:
danial
2025-04-12 15:19:08 +08:00
parent 79b888feed
commit 0fee89a585
4 changed files with 58 additions and 38 deletions

View File

@@ -24,7 +24,8 @@ RUN pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple gunicorn gevent
RUN pip3 install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
ENV FLASK_APP=app.py
ENV
ENV PROXY_USER=""
ENV PROXY_PASS=""
# 添加健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \

View File

@@ -1,10 +1,17 @@
import os
class Config:
@staticmethod
def get_proxy_user():
return os.getenv('PROXY_USER', 'AZ7L3BH2')
def get_proxy_user() -> str:
env = os.getenv("PROXY_USER", "AZ7L3BH2")
if not env:
env = "AZ7L3BH2"
return env
@staticmethod
def get_proxy_pass():
return os.getenv('PROXY_PASS', 'EB4E494E55E8')
def get_proxy_pass() -> str:
env = os.getenv("PROXY_PASS", "EB4E494E55E8")
if not env:
env = "EB4E494E55E8"
return env

View File

@@ -64,7 +64,8 @@ class ProxyPool:
for attempt in range(max_attempts):
try:
res = requests.get(f"https://overseas.proxy.qg.net/get?key={Config.get_proxy_user()}&num=1&area=&isp=&format=txt&seq=\n&distinct=false",
res = requests.get(
f"https://overseas.proxy.qg.net/get?key={Config.get_proxy_user()}&num=1&area=&isp=&format=txt&seq=\n&distinct=false",
timeout=self.proxy_timeout,
)
ip = res.text.strip()

View File

@@ -29,13 +29,13 @@ class BalanceSpider:
"Sec-Fetch-User": "?1",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
"sec-ch-ua": "\"Chromium\";v=\"128\", \"Not;A=Brand\";v=\"24\", \"Google Chrome\";v=\"128\"",
"sec-ch-ua": '"Chromium";v="128", "Not;A=Brand";v="24", "Google Chrome";v="128"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"Windows\""
"sec-ch-ua-platform": '"Windows"',
}
self.cookies = {
"JSESSIONID": "11135983F14E3998362F999181C47C11",
"route": "1b5f48f4adb644d219f3f9f868ac958d"
"route": "1b5f48f4adb644d219f3f9f868ac958d",
}
self.url = "https://www.upcard.com.cn:8091/chinaloyalty/walmart/qrybaltxn.html"
self.code_url = "https://www.upcard.com.cn:8091/webqry/walmart/image.jsp"
@@ -50,9 +50,9 @@ class BalanceSpider:
current_os = platform.system()
if current_os == "Linux":
redis_url = 'redis://:jd2024@10.0.0.211:6379/0'
redis_url = "redis://:jd2024@10.0.0.211:6379/0"
else:
redis_url = 'redis://:jd2024@120.79.27.250:6379/0'
redis_url = "redis://:jd2024@120.79.27.250:6379/0"
REDIS_POOL = redis.ConnectionPool.from_url(redis_url)
self.redis_conn = redis.StrictRedis(connection_pool=REDIS_POOL)
@@ -63,7 +63,7 @@ class BalanceSpider:
headers=self.headers,
cookies=self.cookies,
proxies=self.proxies,
timeout=self.timeout
timeout=self.timeout,
)
def request_code(self):
@@ -72,20 +72,18 @@ class BalanceSpider:
headers=self.headers,
cookies=self.cookies,
proxies=self.proxies,
timeout=self.timeout
timeout=self.timeout,
)
return res.content
def request_next_index(self, code):
params = {
"link": "next"
}
params = {"link": "next"}
data = {
"card1": self.card_num[0:4],
"card2": self.card_num[4:8],
"card3": self.card_num[8:12],
"card4": self.card_num[12:],
"rand": code
"rand": code,
}
self.session.post(
self.url,
@@ -94,22 +92,18 @@ class BalanceSpider:
params=params,
data=data,
proxies=self.proxies,
timeout=self.timeout
timeout=self.timeout,
)
def request_balance(self):
data = {
"dateFrom": "",
"dateTo": "",
"cardNo": self.card_num
}
data = {"dateFrom": "", "dateTo": "", "cardNo": self.card_num}
response = self.session.post(
self.url,
headers=self.headers,
cookies=self.cookies,
data=data,
proxies=self.proxies,
timeout=self.timeout
timeout=self.timeout,
)
return response.text
@@ -121,11 +115,13 @@ class BalanceSpider:
res = response.json()
return res.get("data").get("code")
except:
logger.info(f"订单号:{self.card_num},识别验证码异常:{traceback.format_exc()}")
logger.info(
f"订单号:{self.card_num},识别验证码异常:{traceback.format_exc()}"
)
return None
def get_balance(self, html_content):
soup = BeautifulSoup(html_content, 'html.parser')
soup = BeautifulSoup(html_content, "html.parser")
element = soup.find(class_="STYLE3")
if element:
text = element.text
@@ -149,7 +145,7 @@ class BalanceSpider:
def xiongmao_proxy():
_version = sys.version_info
is_python3 = (_version[0] == 3)
is_python3 = _version[0] == 3
ip = "dtqybf.xiongmaodaili.com"
# 企业动态按并发
@@ -165,29 +161,40 @@ class BalanceSpider:
}
proxy = {"http": proxyMeta, "https": proxyMeta}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36"}
r = requests.get("https://httpbin.org/ip", headers=headers, proxies=proxy, verify=False, allow_redirects=False)
r.encoding = 'utf8'
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36"
}
r = requests.get(
"https://httpbin.org/ip",
headers=headers,
proxies=proxy,
verify=False,
allow_redirects=False,
)
r.encoding = "utf8"
print(r.status_code)
print(r.text)
if r.status_code == 302 or r.status_code == 301:
loc = r.headers['Location']
loc = r.headers["Location"]
print(loc)
r = requests.get(loc, headers=headers, proxies=proxy, verify=False, allow_redirects=False)
r.encoding = 'utf8'
r = requests.get(
loc, headers=headers, proxies=proxy, verify=False, allow_redirects=False
)
r.encoding = "utf8"
print(r.status_code)
print(r.text)
return proxy
def get_proxy2(self):
proxy_list = self.redis_conn.lrange('proxy_list', 0, -1)
proxy_list = self.redis_conn.lrange("proxy_list", 0, -1)
proxy_list = [i.decode("utf-8") for i in proxy_list]
ip = random.choice(proxy_list)
self.proxies = {
"http": ip,
"https": ip,
}
logger.info(f"订单号:{self.card_num}get_proxy2获取短效代理ip{self.proxies}")
logger.info(
f"订单号:{self.card_num}get_proxy2获取短效代理ip{self.proxies}"
)
def run(self):
code = 20016
@@ -204,7 +211,9 @@ class BalanceSpider:
continue
self.request_next_index(verify_code)
balance_html_str = self.request_balance()
logger.info(f"订单号:{self.card_num}balance_html_str页面返回{balance_html_str}")
logger.info(
f"订单号:{self.card_num}balance_html_str页面返回{balance_html_str}"
)
if "卡号不存在" in balance_html_str:
return 20017, "0.0"
if "请输入验证码" in balance_html_str:
@@ -214,12 +223,14 @@ class BalanceSpider:
return 20016, "0.0"
return 2000, balance
except:
logger.info(f"卡号:{self.card_num},报错信息:{traceback.format_exc()}")
logger.info(
f"卡号:{self.card_num},报错信息:{traceback.format_exc()}"
)
continue
return code, balance
if __name__ == '__main__':
if __name__ == "__main__":
# card_num = "2326990641118388461"
# res = BalanceSpider(
# card_num=card_num