[Python/网络爬虫] 技术调研-效能工具:统计指定 Github 项目的 Star 数 和 Fork 数
序
- DeepSeek / Kimi 等 AI 大模型,尚且无法直接准确抓取网站的数据,抓取工作仍需我们人工手动抓取。
2025.02.08
-
技术调研工作中,非常常见、且耗时的一项工作即:对比 Github 开源项目的 star 数 和 fork 数。
-
本工具能大幅提升此项工作的效率。
源码实现(Python)
markdown_table_to_csv.py : Markdown 转 CSV 文件数据(可选)
- 依赖:
markdown_table_to_csv.py
github_projects_stat_spider.py(抓取 Github 项目的统计数据)
# 导入 markdown_table_to_csv.py 模块
from markdown_table_to_csv import parse_markdown_table, write_csv
import requests
"""
+ 角色: 高级Python软件工程师
+ 开发需求: 使用Python,严格地根据 github.com 网站,抓取、统计开源项目此刻最新的开源项目的 star数 和 fork数,以Markdown表格形式【项目名称(projectName)、URL(url)、Star数(starCount)、Fork数(forkCount)】列出:
> + { "projectName": "joplin", "url" : "https://github.com/laurent22/joplin" }
> + { "projectName": "Standard Notes", "url": "https://github.com/standardnotes/app" }
> - Joplin : https://github.com/laurent22/joplin
> - Standard Notes : https://github.com/standardnotes/app
"""
# 方式1 : 通过 requests.get 获取数据
"""
# usage
repo_data = fetch_github_repo_data(repo_url)
if repo_data:
print(f"| {repo_data[0]} | {repo_data[1]} | {repo_data[2]} | {repo_data[3]} |")
else:
print(f"| {repo_url} | N/A | N/A | N/A |")
"""
def fetch_github_stats(repo_url):
api_url = repo_url.replace("https://github.com/", "https://api.github.com/repos/")
response = requests.get(api_url)
if response.status_code == 200:
data = response.json()
return repo_url, data['stargazers_count'], data['forks_count']
else:
return None
# 方式2 : 通过 bs4.BeautifulSoup 解析网页
"""
def fetch_github_stats(url):
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.content, 'html.parser')
star_count = soup.find('a', href=lambda href: href and 'stargazers' in href).find('span').text.strip()
fork_count = soup.find('a', href=lambda href: href and 'network/members' in href).find('span').text.strip()
return repo_url, star_count, fork_count
else:
return repo_url, None, None
"""
def generate_markdown_table(projects):
markdown_table = "| 项目名称(projectName) | URL(url) | Star数(starCount) | Fork数(forkCount) |\n"
markdown_table += "| ---------------------- | --------- | ----------------- | ----------------- |\n"
for project in projects:
url, star_count, fork_count = fetch_github_stats(project['url'])
markdown_table += f"| {project['projectName']} | {project['url']} | {star_count} | {fork_count} |\n"
return markdown_table
def main():
# Step1 定义要抓取的项目列表
projects = [
{ "projectName": "Joplin", "url": "https://github.com/laurent22/joplin" }
, { "projectName": "Standard Notes", "url": "https://github.com/standardnotes/app" }
, { "projectName": "Mark Text", "url": "https://github.com/marktext/marktext" }
, { "projectName": "Zettlr", "url": "https://github.com/Zettlr/Zettlr" }
, { "projectName": "Notable", "url": "https://github.com/notable/notable" }
, { "projectName": "Boostnote(已停止维护,但社区版本仍在)", "url": "https://github.com/BoostIO/BoostNote.next" }
, { "projectName": "Logseq", "url": "https://github.com/logseq/logseq" }
, { "projectName": "VNote", "url": "https://github.com/vnotex/vnote" }
]
# Step2 生成Markdown表格
markdown_table = generate_markdown_table(projects)
# Step3 打印Markdown表格
print("dataset(markdown):\n", markdown_table, "\n")
# Step4 将Markdown表格写入CSV文件
# step4.1 解析 Markdown 表格
# headers, rows = parse_markdown_table(markdown_table)
# step4.2 将解析后的数据写入 CSV 文件
# output_dir = 'C:\\Users\\xxxx\\Desktop\\output.csv';
# write_csv(headers, rows, output_dir)
# print(f"CSV文件已生成到: {output_dir}")
if __name__ == "__main__":
main()
X 参考文献
本文作者:
千千寰宇
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!

浙公网安备 33010602011771号