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

Python爬取Craigslist时嵌套列表遍历与格式输出问题排查

Craigslist商品条目爬取问题修复方案

故障根因

  • 当前代码仅定义了价格、日期两个字段的提取函数,没有编写函数调用逻辑,也没有实现标题、距离两个字段的提取,更没有做单条商品的字段组装,运行后自然没有任何输出
  • 之前出现的「仅单个字段返回全量数据、其余条目/字段缺失」问题,本质是提取逻辑的粒度错误:直接在全页面范围捞取所有同字段元素,没有以单条商品对应的父容器为单位提取数据,很容易出现字段错位、数据匹配不上的问题

正确实现思路

以单条商品的容器节点为最小提取单位,从根源避免字段错位:

  • 第一步:定位页面所有li.result-row节点,每个节点对应1条独立的Craigslist商品条目
  • 第二步:遍历每个商品节点,在节点内部分别查找价格、发布日期、标题、距离四个目标字段
  • 第三步:组装单条商品的结构化数据,逐行输出即可;如果需要存为列表/字典/元组等结构,在循环外初始化空容器,每次循环将单条数据写入即可

可运行修正代码

from requests_html import HTMLSession

session = HTMLSession()
url = "https://sandiego.craigslist.org/search/nsd/sss?query=computer"
resp = session.get(url)

# 获取所有商品条目节点
listing_nodes = resp.html.find("li.result-row")

for node in listing_nodes:
    # 单条节点内提取字段,加空值判断避免部分条目缺字段时报错
    price = node.find(".result-price", first=True).text if node.find(".result-price", first=True) else "无价格"
    pub_date = node.find(".result-date", first=True).text if node.find(".result-date", first=True) else "无发布日期"
    title = node.find(".result-title.hdrlnk", first=True).text if node.find(".result-title.hdrlnk", first=True) else "无标题"
    distance = node.find(".maptag", first=True).text if node.find(".maptag", first=True) else "无距离信息"

    # 逐行输出单条商品数据
    print(f"价格:{price} | 发布日期:{pub_date} | 标题:{title} | 距离:{distance}")

代码中选择器做了简化,只要是在单条商品节点内查找元素,不需要写全量的长选择器路径,能大幅降低选择器写错的概率。如果需要导出数据,直接在循环内将单条字段组装为字典/元组追加到预设的列表中即可。

内容的提问来源于stack exchange,提问作者Anoduck - The Anonymous Duck

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:36:21