You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用bs4库提取嵌套标签内容,爬取GitHub趋势页仓库数据

解决方案

1. 星数提取方案

你获取到的星数a标签中包含svg元素和多余空白字符,直接调用.text.strip()即可提取到纯文本星数字符串,替换掉可能存在的千位分隔逗号后转为整数即可使用。

2. 开发者与仓库名提取方案

每个仓库条目下的h2标签内存储了完整的仓库路径信息,你可以直接提取h2下a标签的href属性,去掉首尾斜杠后按/做1次切割,得到的第一个元素为开发者名称,第二个为仓库名称,使用1次切割可以避免仓库名自带斜杠时切割错误。

修正后完整代码
import requests
from bs4 import BeautifulSoup

url_github = "https://github.com/trending"

def request_github_trending(url):
    # 新增请求头避免被GitHub反爬拦截
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
    }
    return requests.get(url, headers=headers)

def extract(page):
    soup = BeautifulSoup(page.content, 'html.parser')
    return soup.find_all('article', class_="Box-row")

def transform(html_repos):
    result = []
    for repo in html_repos:
        # 提取星数
        stars_ele = repo.find('a', class_="Link--muted d-inline-block mr-3")
        stars = int(stars_ele.text.strip().replace(',', '')) if stars_ele else 0
        
        # 提取开发者和仓库名
        repo_path = repo.find('h2', class_='h3 lh-condensed').find('a')['href'].strip('/')
        dev_name, repo_name = repo_path.split('/', 1)
        
        result.append({
            "开发者": dev_name,
            "仓库名": repo_name,
            "星数": stars
        })
    return result

# 测试输出前3条趋势仓库信息
trending_data = transform(extract(request_github_trending(url_github)))
for item in trending_data[:3]:
    print(item)

内容的提问来源于stack exchange,提问作者Zhamshidbek Abdulkhamidov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 22:24:05