如何拆分BeautifulSoup提取的td标签时间段并存入Pandas DataFrame
错误原因说明
你代码中el.find("first")返回None是因为find()方法的参数是目标子标签的标签名,而"first"是td节点的class属性值,并不是子标签名,自然找不到对应内容。要提取td节点内的文本,直接调用el.get_text()或者el.text即可。
最优实现方案
直接对拿到的rSet节点列表做遍历提取,用列表推导式就能完成数据整理,再直接转DataFrame即可,性能和可读性都最优:
from bs4 import BeautifulSoup as bs import pandas as pd import requests myURL = "xxxxx" page = requests.get(myURL) soup = bs(page.content,"html.parser") rSet = soup.find_all("td", class_="first") # 核心处理逻辑 time_pairs = [el.get_text(strip=True).split(" - ") for el in rSet] df = pd.DataFrame(time_pairs, columns=["start_time", "end_time"])
鲁棒性增强版本
如果存在部分td节点内容不符合xx:xx - xx:xx格式的情况,可以加异常处理避免程序崩溃:
time_pairs = [] for el in rSet: try: time_str = el.get_text(strip=True) start, end = time_str.split(" - ") time_pairs.append((start.strip(), end.strip())) except (ValueError, AttributeError): # 跳过格式异常的条目 continue df = pd.DataFrame(time_pairs, columns=["start_time", "end_time"])
内容的提问来源于stack exchange,提问作者OldNick
相关产品推荐
相关产品推荐

