BS4抓取的<a>标签列表转DataFrame丢失URL信息:原因及解决方法问询
问题原因与解决方法
问题原因
你当前的代码只是将BeautifulSoup抓取到的<a>标签对象存入列表,当直接把这个列表转换为DataFrame时,pandas会默认调用Tag对象的字符串输出方法,只显示标签内的文本内容(也就是球队名称),不会自动提取href属性,因此URL路径信息丢失。
解决方法
需要手动遍历每个<a>标签,分别提取文本(球队名称)和href属性值,构造包含这两个字段的字典列表,再用pandas转换为DataFrame。
完整代码如下:
import requests from bs4 import BeautifulSoup import pandas as pd URL = "https://www.pro-football-reference.com/years/2022/" page = requests.get(URL) soup = BeautifulSoup(page.content, "html.parser") nfc_results = soup.find(id="div_NFC") nfc_team_elements = nfc_results.find_all("a") # 构造存储球队信息的字典列表 team_data = [] for tag in nfc_team_elements: # 提取球队名称,strip=True去除前后空白 team_name = tag.get_text(strip=True) # 提取href属性对应的URL路径 team_url = tag.get("href") team_data.append({"Team Name": team_name, "Team Code": team_url}) # 转换为DataFrame df = pd.DataFrame(team_data) print(df)
关键步骤说明
tag.get_text(strip=True):获取<a>标签内的纯文本内容,strip=True可以清理文本前后的空格、换行符等冗余字符。tag.get("href"):通过get()方法安全提取标签的href属性值,这就是你需要的球队详情页URL路径。- 将每个球队的信息封装为字典,再收集到列表中,pandas就能根据字典的键生成对应的列,完美保留你需要的两个字段。
内容的提问来源于stack exchange,提问作者stwelhoelter
相关产品推荐
相关产品推荐

