You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何抓取无特定类名HTML标签的网站?二手车站li内容提取求助

如何提取二手车网站中嵌套在li标签内的复杂信息

我正在爬取二手车网站https://jammer.ie/used-cars,已经成功获取车辆品牌(make)、型号(model)、年份(year)及里程(miles)信息,但其余信息都嵌套在li标签中,部分li标签内还包含img和span标签,不知道怎么提取这些内容。以下是我的Python代码:

from bs4 import BeautifulSoup
import requests
import pandas as pd

url = 'https://jammer.ie/used-cars'
response = requests.get(url)
# 确认请求成功,状态码应为200
print(response.status_code)

soup = BeautifulSoup(response.content, 'html.parser')
# 获取所有车辆的右侧内容区域
results = soup.find_all('div', {'class': 'span-9 right-col'})
print(f"共找到{len(results)}辆二手车")

# 提取第一辆车的基础信息
make = results[0].find('h6',{'class':'car-make'}).get_text(strip=True)
model = results[0].find('p', {'class':'model'}).get_text(strip=True)
year = results[0].find('p', {'class': 'year'}).get_text(strip=True)
# 里程是第一个li的内容,用strip()去掉换行和空格
miles = results[0].find('li').get_text(strip=True)

print(f"品牌:{make},型号:{model},年份:{year},里程:{miles}")

提取嵌套li中复杂内容的方法

那些包含img和span的li标签,本质是用图标(img)标注属性类型,用span显示属性值。我们可以遍历单辆车的所有li标签,逐个提取信息:

  • 先获取单辆车的所有li标签,用find_all('li')拿到该车辆的所有属性项
  • 遍历每个li:如果有img,优先取img的alt属性(这是属性名称,比如“Fuel Type”);再取span的文本(这是属性值,比如“Diesel”);要是没有span,直接取li的文本内容即可

修改后的完整代码(带注释)

from bs4 import BeautifulSoup
import requests
import pandas as pd

url = 'https://jammer.ie/used-cars'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
results = soup.find_all('div', {'class': 'span-9 right-col'})

# 用来存储所有车辆信息的列表
cars_data = []

for car in results:
    # 提取基础信息
    car_info = {
        '品牌': car.find('h6',{'class':'car-make'}).get_text(strip=True),
        '型号': car.find('p', {'class':'model'}).get_text(strip=True),
        '年份': car.find('p', {'class': 'year'}).get_text(strip=True),
        '里程': car.find('li').get_text(strip=True)
    }
    
    # 获取该车辆的所有属性li标签,跳过第一个已提取的里程li
    feature_list = car.find_all('li')[1:]
    
    for feature in feature_list:
        # 提取img的alt作为属性名(如果有),无则用默认值
        img_tag = feature.find('img')
        attr_name = img_tag.get('alt', '未知属性').strip() if img_tag else '未知属性'
        
        # 提取span的文本作为属性值(如果有),无则直接取li文本
        span_tag = feature.find('span')
        attr_value = span_tag.get_text(strip=True) if span_tag else feature.get_text(strip=True)
        
        # 将属性添加到字典中
        car_info[attr_name] = attr_value
    
    cars_data.append(car_info)

# 转成DataFrame方便查看和后续处理
df = pd.DataFrame(cars_data)
print(df.head())

关键代码解释

  • get_text(strip=True):比replace('\n', "")更高效,直接去掉文本前后的空格、换行符
  • car.find_all('li')[1:]:跳过第一个已提取的里程li,避免重复处理
  • img_tag.get('alt', '未知属性'):设置默认值,避免因img无alt属性导致报错
  • 用字典存储单辆车的所有信息,最后汇总成列表转DataFrame,便于数据整理

内容的提问来源于stack exchange,提问作者user14820169

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:25:20