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

如何修改现有爬虫脚本,在单次迭代中同时抓取p标签与h2标签数据并同步到Google表格?

如何修改现有爬虫脚本,在单次迭代中同时抓取p标签与h2标签数据并同步到Google表格?

当然可以直接修改你的第一个脚本,不用单独写新的!我帮你整合了抓取H2标签(球员位置)的逻辑,同时保留原来抓取P标签数据的功能,这样就能一次性把所有需要的信息都同步到Google表格里了。

修改后的完整脚本

import requests
from bs4 import BeautifulSoup
import gspread

gc = gspread.service_account(filename='creds.json')
sh = gc.open_by_key('1DpasSS8yC1UX6WqAbkQ515BwEEjdDL-x74T0eTW8hLM')
worksheet = sh.get_worksheet(3)

def get_links(url):
    data = []
    req_url = requests.get(url)
    soup = BeautifulSoup(req_url.content, "html.parser")
    
    for td in soup.find_all('td', {'data-th': 'Player'}):
        a_tag = td.a
        name = a_tag.text
        player_url = a_tag['href']
        print(f"Getting {name}")
        
        req_player_url = requests.get(f"https://basketball.realgm.com{player_url}")
        soup_player = BeautifulSoup(req_player_url.content, "html.parser")
        div_profile_box = soup_player.find("div", class_="profile-box")
        
        row = {"Name": name, "URL": player_url}
        
        # 新增:抓取H2标签的球员位置
        try:
            # 定位到位置对应的H2标签(根据页面结构,它的class是profile-box-heading)
            position = soup_player.find("h2", class_="profile-box-heading").get_text(strip=True)
            row["Position"] = position
        except AttributeError:
            # 如果找不到该标签,给个空值或者默认值
            row["Position"] = ""
        
        # 保留原来抓取P标签数据的逻辑
        for p in div_profile_box.find_all("p"):
            try:
                key, value = p.get_text(strip=True).split(':', 1)
                row[key.strip()] = value.strip()
            except:
                pass
        
        data.append(row)
    return data

urls = [
    'https://basketball.realgm.com/dleague/players/2022',
    'https://basketball.realgm.com/dleague/players/2021',
    'https://basketball.realgm.com/dleague/players/2020',
    'https://basketball.realgm.com/dleague/players/2019',
    'https://basketball.realgm.com/dleague/players/2018',
]

res = []
for url in urls:
    print(f"Getting: {url}")
    data = get_links(url)
    res = [*res, *data]

if res != []:
    header = list(res[0].keys())
    values = [
        header, *[[e[k] if e.get(k) else "" for k in header] for e in res]
    ]
    worksheet.append_rows(values, value_input_option="USER_ENTERED")

关键修改说明

  • 新增H2标签抓取逻辑:在处理每个球员页面时,先定位到显示位置的H2标签(根据页面结构,它的class是profile-box-heading),把提取到的文本添加到row字典的Position字段中,同时用try-except处理找不到标签的情况,避免脚本崩溃。
  • 保留原有P标签逻辑:原来抓取个人信息(比如身高、体重等)的代码完全保留,这样不会丢失之前的功能。

为什么你的第二个脚本没生效?

你写的第二个脚本只是找到了H2标签,但没有把提取到的文本内容添加到row字典里,最终row里没有Position字段,所以同步到表格后看不到位置数据。现在修改后的脚本直接把位置信息存入row,就能和其他字段一起被写入表格了。

备注:内容来源于stack exchange,提问作者Anthony Madle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 14:03:14