如何修改现有爬虫脚本,在单次迭代中同时抓取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
相关产品推荐
相关产品推荐

