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

使用bs4提取Airbnb房东入驻时长异常的问题排查

问题分析与解决方案

问题原因

你使用的l7n4lsf atm_9s_1o8liyq_keqd55 dir dir-ltr这个class并非唯一,页面中多个<li>元素都使用了该class,soup.find()会返回页面中第一个匹配的元素,也就是房源基础信息(客容量、户型等)对应的<li>,所以拿到了错误结果。

修复方案

方案1:通过父元素层级定位

利用入驻时长所在的父级<ol>的class精准定位,再获取内部的<li>文本:

# 先定位到包含入驻时长的ol容器
hosting_ol = soup.find('ol', class_='lgx66tx atm_gi_idpfg4 atm_l8_idpfg4 dir dir-ltr')
if hosting_ol:
    account_active_since = hosting_ol.find('li').get_text(strip=True)
else:
    account_active_since = "未获取到房东入驻时长"

方案2:通过文本特征筛选

因为入驻时长的文本格式固定为X years hosting,可以先获取所有匹配class的<li>,再筛选包含hosting关键词的元素:

# 获取所有目标class的li元素
target_li_list = soup.find_all('li', class_='l7n4lsf atm_9s_1o8liyq_keqd55 dir dir-ltr')
account_active_since = "未获取到房东入驻时长"
# 遍历筛选带hosting的文本
for li in target_li_list:
    li_text = li.get_text(strip=True)
    if 'hosting' in li_text:
        account_active_since = li_text
        break

额外建议

Airbnb的页面class(如atm_*前缀的)是动态生成的,可能随时变更,更稳定的方式是结合Selenium的等待机制,确保目标元素加载完成后再解析:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

# 等待目标li元素加载(用文本包含hosting作为条件)
wait = WebDriverWait(driver, 10)
hosting_element = wait.until(EC.presence_of_element_located((By.XPATH, "//li[contains(text(), 'hosting')]")))
account_active_since = hosting_element.text.strip()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:35:15