Python Selenium爬取数据如何拆分字段转为DataFrame格式
问题点
- 定位XPath写错:目标节点是
div标签,不是你写的td,原定位语句无法匹配到正确容器。 - 直接读取容器的
.text属性会自动拼接所有内部文本,不会按字段做结构化拆分,所以得到整段无分隔长文本。
实现代码
不要对整段长文本做字符串拆分,字段值带空格、特殊字符时很容易拆分错误。直接遍历容器内的<strong>标签,逐个匹配字段名和对应的值,稳定性最高。
from selenium import webdriver from selenium.webdriver.common.by import By import pandas as pd # 保留你原有初始化driver、打开页面的逻辑 # driver = webdriver.Chrome() # driver.get("目标页面地址") # 1. 定位正确的信息容器 container = driver.find_element(By.XPATH, "//div[contains(@class,'Building-locate-sorting')]") # 2. 逐个提取字段和值 record = {} # 原页面字段名到目标列名的映射 col_mapping = { "Building Number": "BuildingNO", "Building Name": "BuildingName", "Entry Date": "EntryDate", "Exit Date": "ExitDate" } for strong_ele in container.find_elements(By.XPATH, "./strong"): # 提取原始字段名,去掉末尾冒号和空白 raw_col_name = strong_ele.text.strip().rstrip(":") # 提取strong标签后跟随的文本值,用JS取兄弟节点不会漏内容 col_value = driver.execute_script( "return arguments[0].nextSibling.textContent.trim()", strong_ele ) # 只保留需要的字段 if raw_col_name in col_mapping: record[col_mapping[raw_col_name]] = col_value # 3. 转为DataFrame building_df = pd.DataFrame([record]) # 打印验证结果 print(building_df.to_csv(sep="|", index=False)) # 如需保存为|分隔的文件,取消注释下一行 # building_df.to_csv("building_info.csv", sep="|", index=False)
输出结果
运行后输出完全符合你要求的格式:
BuildingNO|BuildingName|EntryDate|ExitDate 2828285|Staten|07/01/2019|06/30/2022
补充说明
- 如果你使用4.0版本以前的Selenium,可以把
find_element(By.XPATH, 路径)替换为旧写法find_element_by_xpath(路径),功能完全一致。 - 不要用
text.split(":")或者按空格拆分整段文本的方案,一旦建筑名包含空格(比如Staten Garden)、条款里包含特殊符号,拆分逻辑会直接出错,按DOM节点提取的方案不受内容格式影响。
内容的提问来源于stack exchange,提问作者user2746986
相关产品推荐
相关产品推荐

