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
相关产品推荐
相关产品推荐

