支持从多个游戏媒体网站抓取最新资讯,并提供 两种扩展方式 添加自定义网站。
cd game_news_crawler
pip install -r requirements.txt
python crawler.py运行 python crawler.py 后会显示交互菜单:
============================================================
🎮 游戏资讯爬虫(可扩展版)
============================================================
可用的资讯来源:
1. 3DM Game
2. 游民星空
3. 游研社
4. 游戏时光 VGTime
5. [插件] chuapp
0. 全部爬取
请选择来源编号(多个用逗号分隔,直接回车爬取全部):
- 直接回车 — 爬取全部来源
- 输入
1,2— 只爬取 3DM Game 和游民星空 - 输入
0— 全部爬取
爬取完成后,结果自动保存到 output/ 目录,同时生成:
game_news_YYYYMMDD_HHMMSS.json— 结构化 JSON 数据game_news_YYYYMMDD_HHMMSS.md— 可直接阅读的 Markdown 文件
from crawler import GameNewsCrawler crawler = GameNewsCrawler(output_dir="output", delay=1.5) # 爬取全部来源 items = crawler.run() # 只爬取指定来源 items = crawler.run(sources=["游民星空", "游研社"]) # 保存结果 crawler.save_json(items) # 保存为 JSON crawler.save_markdown(items) # 保存为 Markdown # 查看所有可用来源 print(crawler.list_sources()) # 遍历结果 for item in items: print(f"[{item.source}] {item.title}") print(f" 链接: {item.url}") print(f" 摘要: {item.summary}") print()
JSON 格式(适合程序处理):
[
{
"title": "新闻标题",
"url": "https://...",
"source": "来源网站",
"summary": "摘要内容",
"author": "作者",
"publish_time": "2026年04月10日",
"image_url": "https://...",
"crawl_time": "2026年04月10日 12:00:00"
}
]Markdown 格式(适合直接阅读):按来源分组,每条资讯包含标题(可点击跳转)、时间、作者和摘要。
打开 sites.json,添加一条新的站点配置即可。只需要填写 网址 + CSS 选择器:
{
"name": "我的新站点",
"enabled": true,
"base_url": "https://example.com",
"list_url": "https://example.com/news",
"encoding": null,
"max_items": 20,
"selectors": {
"article_list": ".news-list li",
"title": "h3 a",
"link": "a[href]",
"summary": ".desc",
"image": "img[src]",
"time": ".date",
"author": ".author"
}
}字段说明:
| 字段 | 说明 |
|---|---|
name |
来源显示名称 |
enabled |
true/false,可临时禁用某个站点 |
base_url |
站点根地址,用于拼接相对链接 |
list_url |
新闻列表页 URL |
encoding |
页面编码,null 表示自动检测 |
max_items |
最多抓取条数 |
selectors.article_list |
新闻列表的 CSS 选择器(选中所有文章条目) |
selectors.title |
每条文章中标题元素的选择器 |
selectors.link |
链接元素的选择器 |
selectors.summary |
摘要元素的选择器 |
selectors.image |
封面图的选择器 |
selectors.time |
发布时间的选择器 |
selectors.author |
作者的选择器 |
如何找到正确的选择器?
- 用浏览器打开目标网站的新闻列表页
- 按
F12打开开发者工具 - 用元素选择器(左上角箭头图标)点击新闻条目
- 观察 HTML 结构,找到列表容器和每个条目的 class/tag
- 填入对应的 CSS 选择器
当网站结构复杂(需要翻页、调 API、处理 JS 渲染等),可以编写插件放到 custom_crawlers/ 目录。
步骤:
- 在
custom_crawlers/下新建.py文件(如mysite.py) - 定义
crawl(fetcher)函数 - 返回
list[NewsItem]
最小模板:
"""custom_crawlers/mysite.py""" import sys, os from urllib.parse import urljoin sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from crawler import NewsItem SOURCE_NAME = "我的站点" def crawl(fetcher) -> list: soup = fetcher.get("https://example.com/news") if not soup: return [] items = [] for tag in soup.select(".news-item")[:20]: a = tag.select_one("a[href]") if not a: continue items.append(NewsItem( title=a.get_text(strip=True), url=urljoin("https://example.com", a["href"]), source=SOURCE_NAME, )) return items
插件中 fetcher 提供的能力:
# 请求页面,返回 BeautifulSoup 对象 soup = fetcher.get(url) soup = fetcher.get(url, encoding="utf-8") # 指定编码
game_news_crawler/
├── crawler.py # 核心引擎
├── sites.json # 站点配置(零代码扩展)
├── custom_crawlers/ # 自定义插件目录
│ ├── __init__.py
│ └── chuapp.py # 示例插件:触乐网
├── requirements.txt
├── output/ # 输出目录
└── README.md
- 请求间隔默认 1.5 秒,请合理设置,勿对目标站点造成压力
- 网站结构会变化,如果抓取结果为空,需更新选择器
- 仅供学习交流,请遵守各网站的 robots.txt 和使用条款