🐛 Fix honkai web parse

This commit is contained in:
xtaodada 2023-07-05 11:17:18 +08:00
parent f21a6d6ae3
commit 7b19618fcd
Signed by: xtaodada
GPG Key ID: 4CBB3F4FA8C85659

View File

@ -8,12 +8,13 @@ from bs4 import BeautifulSoup, Tag
from .code import Code, Reward from .code import Code, Reward
url = "https://honkai.gg/cn/codes" url = "https://honkai.gg/codes/"
reward_map = { reward_map = {
"Stellar Jade": "星琼", "Stellar Jade": "星琼",
"Credit": "信用点", "Credit": "信用点",
"Credits": "信用点", "Credits": "信用点",
"Traveler's Guide": "漫游指南", "Traveler's Guide": "漫游指南",
"Travelers Guide": "漫游指南",
"Refined Aether": "提纯以太", "Refined Aether": "提纯以太",
"Adventure Log": "冒险记录", "Adventure Log": "冒险记录",
"Dust of Alacrity": "疾速粉尘", "Dust of Alacrity": "疾速粉尘",
@ -42,27 +43,32 @@ def parse_reward(reward: List[str]) -> Reward:
def parse_code(tr: Tag) -> Code: def parse_code(tr: Tag) -> Code:
tds = tr.find_all("td") tds = tr.find_all("td")
code = tds[0].text.strip() code = tds[0].text.strip()
expire = tds[2].text.strip() try:
if expire.endswith("?"): expire = tds[2].text.strip()
expire = datetime(2099, 12, 31, 23, 59, 59, 999999) except IndexError:
else: expire = datetime(1970, 1, 1, 1, 0, 0, 0)
expires = expire.split(" - ") if isinstance(expire, str):
day = expires[1].split(" ")[-1] if expire.endswith("?"):
month = expires[0].split(" ")[0] expire = datetime(2099, 12, 31, 23, 59, 59, 999999)
try: else:
if " " not in expires[1]: expires = expire.split(" ")
raise ValueError day = expires[1].split(" ")[-1]
month = expires[1].split(" ")[0] month = expires[0].split(" ")[0]
except ValueError: try:
pass if " " not in expires[1]:
now = datetime.now() raise ValueError
expire = datetime.strptime(f"{day} {month}", "%d %b") month = expires[1].split(" ")[0]
expire = expire.replace(year=now.year, hour=23, minute=59, second=59, microsecond=999999) except ValueError:
pass
now = datetime.now()
expire = datetime.strptime(f"{day} {month}", "%d %b")
expire = expire.replace(year=now.year, hour=23, minute=59, second=59, microsecond=999999)
expire = timezone("Asia/Shanghai").localize(expire) expire = timezone("Asia/Shanghai").localize(expire)
expire = int(expire.timestamp() * 1000) expire = int(expire.timestamp() * 1000)
rewards = [] rewards = []
for reward in tds[1].find_all("div", {"class": "flex"}): for reward in str(tds[1]).split("<br/>"):
reward_div = reward.text.strip().split("\xa0x ") reward = BeautifulSoup(reward, "lxml")
reward_div = " ".join(reward.text.strip().split()).split(" x ")
if len(reward_div) < 2: if len(reward_div) < 2:
print("Bad td data: ", tds[1]) print("Bad td data: ", tds[1])
continue continue