mirror of
https://git.oceanpay.cc/danial/kami_walmart_slide.git
synced 2025-12-18 21:14:48 +00:00
ci: 更新环境变量获取逻辑并优化代码格式
- 在 config.py 中添加了对环境变量的空值检查 - 更新了 Dockerfile 中的环境变量设置 -优化了 proxy_pool.py 和 spiders.py 中的代码格式 - 修复了部分代码中的小问题
This commit is contained in:
@@ -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 \
|
||||
|
||||
15
config.py
15
config.py
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
75
spiders.py
75
spiders.py
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user