Beatifulsoup 快速实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| import requests import pandas as pd from bs4 import BeautifulSoup from datetime import datetime import matplotlib.pyplot as plt
def fetch_github_trending(keyword="python", date_range="Today"): """ 获取 GitHub 上某个编程语言的趋势仓库。
参数: keyword (str): 要获取趋势仓库的编程语言。默认为 'python'。 date_range (str): 时间范围,默认为 'Today'。
返回: pd.DataFrame: 包含趋势仓库的 URL 和描述的 DataFrame。 """ url = f'https://github.com/trending/{keyword}?since={date_range}' main_url = 'https://github.com{0}' try: response = requests.get(url) response.raise_for_status() html = response.content.decode('utf-8') except requests.RequestException as e: print(f"从 GitHub 获取数据时出错: {e}") return pd.DataFrame() soup = BeautifulSoup(html, 'html.parser') boxes = soup.find_all("article", class_="Box-row") data = [] for box in boxes: h2_tag = box.find('h2', class_='h3 lh-condensed') a_tag = h2_tag.find('a', href=True) if a_tag: url = main_url.format(a_tag['href']) p_tag = box.find('p', class_='col-9 color-fg-muted my-1 pr-4') description = p_tag.text.strip() if p_tag and p_tag.text else '' data.append({'url': url, 'description': description}) df = pd.DataFrame(data) return df
def save_to_csv(df, keyword, date_range): """ 将 DataFrame 保存为 CSV 文件。
参数: df (pd.DataFrame): 要保存的数据。 keyword (str): 编程语言。 date_range (str): 时间范围。 """ try: if date_range.lower() == "weekly": current_date = datetime.now().strftime("%Y-%m") elif date_range.lower() == "monthly": current_date = datetime.now().strftime("%Y-%m") else: current_date = datetime.now().strftime("%Y-%m-%d") filename = f"github_trending_{keyword}_{date_range}_{current_date}.csv" df.to_csv(filename, index=False, encoding='utf-8') print(f"数据已保存到 {filename}") except Exception as e: print(f"保存 CSV 文件时出错: {e}")
if __name__ == "__main__": keyword = input("输入编程语言 (默认: python)(java c++...): ") or "python" date_range = input("输入时间范围 (默认: Today)(Weekly,Monthly): ") or "Today" valid_date_ranges = ["today", "weekly", "monthly"] if date_range.lower() not in valid_date_ranges: print("无效的时间范围,使用默认值 'Today'") date_range = "Today" df = fetch_github_trending(keyword, date_range) print(df) save_to_csv(df, keyword, date_range)
|
效果展示


后记
没什么好写的了属于是。
Don’t know what to learn , ah.
打模拟地铁。
