如何提取class为list-unstyled search-vehicle-info-2 fs13的ul下li数据并归入对应表头
实现步骤与代码示例
- 现有代码的问题:直接调用
soup.find_all("li")是提取了整个页面所有li元素,既没有限定在目标ul的范围内,也没有和表头做对应匹配,无法得到你需要的、和表头一一对应的结构化数据。 - 核心实现逻辑:先定位到你指定class属性的ul标签,仅在该ul范围内提取li元素,再和表头字段按顺序匹配,就可以生成对应表头的结构化数据,最终转为DataFrame。
参考截图:
代码实现
单组ul数据的情况
from bs4 import BeautifulSoup import pandas as pd # 1. 定位指定class的ul标签,把参数替换为你实际的class值 # 注意:bs4中用class_参数指定class属性,因为class是Python保留关键字 target_ul = soup.find("ul", class_="你的目标ul的class属性值") # 2. 提取该ul下所有li的文本 li_texts = [li.text.strip() for li in target_ul.find_all("li")] # 3. 提取表头,有两种方式: # 方式1:手动指定表头 headers = ["表头1", "表头2", "表头3"] # 替换为你实际的表头字段,数量和li数量对应 # 方式2:自动提取页面上的表头,比如表头在class为table-header的ul下 # header_ul = soup.find("ul", class_="表头ul的class值") # headers = [li.text.strip() for li in header_ul.find_all("li")] # 4. 组装为字典,生成DataFrame data = dict(zip(headers, li_texts)) df = pd.DataFrame([data])
多组相同class的ul数据的情况
如果页面上有多个相同class的ul,对应多行数据,可使用如下写法:
from bs4 import BeautifulSoup import pandas as pd # 提前提取表头 headers = ["表头1", "表头2", "表头3"] # 或用上面的自动提取方式 data_list = [] # 找到所有指定class的ul target_uls = soup.find_all("ul", class_="你的目标ul的class属性值") for ul in target_uls: li_texts = [li.text.strip() for li in ul.find_all("li")] # 保证li数量和表头数量一致,避免报错 if len(li_texts) == len(headers): row = dict(zip(headers, li_texts)) data_list.append(row) df = pd.DataFrame(data_list)
内容的提问来源于stack exchange,提问作者Abdurehman Dar
相关产品推荐
相关产品推荐

