stardewwiki

This commit is contained in:
雨霖铃 2025-10-22 00:15:56 +08:00
commit 8e799d54d0
6 changed files with 131 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/.idea

13
Stardew_Valley_Wiki.html Normal file
View File

@ -0,0 +1,13 @@
来自 ConcernedApe

25
WikiNavigationCategory.py Normal file
View File

@ -0,0 +1,25 @@
from typing import List
from bs4 import ResultSet, Tag
class WikiNavigationCategory:
def __init__(self):
self.category_name: str = "" # 分类名称
self.items: List[NavigationItem] = [] # 导航项目列表
class NavigationItem:
def __init__(self):
self.name: str = "" # 项目名称
self.icon_url: str = "" # 图标地址
self.icon_alt: str = "" # 图标描述
self.link: str = "" # 链接路径
self.is_subcategory: bool = False # 是否为子分类
def __str__(self):
return (f" ├── 项目: {self.name}\n"
f" │ ├── 图标: {self.icon_alt}\n"
f" │ ├── 图标URL: {self.icon_url}\n"
f" │ ├── 链接: {self.link}\n"
f" │ └── 是否子分类: {self.is_subcategory}")

8
config.json Normal file
View File

@ -0,0 +1,8 @@
{
"base_url": "https://zh.stardewvalleywiki.com/",
"subpages": [
"Stardew_Valley_Wiki",
"",
""
]
}

78
main.py Normal file
View File

@ -0,0 +1,78 @@
import json
import requests
from bs4 import BeautifulSoup, ResultSet, Tag
from WikiNavigationCategory import WikiNavigationCategory, NavigationItem
def load_config():
"""加载配置"""
with open('config.json', 'r') as f:
return json.load(f)
def get_page(url, sub):
try:
response = requests.get(url + sub)
response.raise_for_status()
except requests.exceptions.HTTPError as e:
print(e)
else:
return response.text
def process_page(page):
return BeautifulSoup(page, 'lxml')
def save_page(page_name, page_content):
file = open("{}.html".format(page_name), 'w')
file.write(page_content)
file.close()
def process_item(category: Tag):
items = category.find_all('div')[1:]
for item in items:
# 正常项目
img = item.find('img')
link = item.find('a')
if img and link:
img_alt = img.get('alt', '无描述')
img_url = img.get('src')
link_text = link.get_text(strip=True)
link_href = link.get('href', '#')
new_item = NavigationItem()
new_item.name = link_text
new_item.icon_url = img_url
new_item.icon_alt = img_alt
new_item.link = link_href
print(new_item)
if __name__ == "__main__":
config = load_config()
base_url = config['base_url']
subpages = config['subpages']
print(subpages)
soup = process_page(get_page(base_url, 'Stardew_Valley_Wiki'))
# 查找包含所有菜单的div
main_menu = soup.find('div', id='mainmenu')
if main_menu:
# 查找所有子div每个分类
categories = main_menu.find_all('div', recursive=False)
for category in categories:
# 获取分类标题
header_div = category.find('div')
if header_div:
category_name = header_div.get_text(strip=True)
process_item(category)

6
requirements.txt Normal file
View File

@ -0,0 +1,6 @@
requests
html2text
markdown
bs4
lxml
fake-useragent