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

如何用Python结合Selenium提取Facebook Marketplace特定时间商品数据

使用Selenium提取Facebook Marketplace指定时间范围的商品日期

核心思路

首先明确:Facebook Marketplace的日期元素不会用name='value'这类属性,你需要先通过浏览器开发者工具(F12)定位到商品发布日期的具体元素(通常是带发布时间文本的span/div),再用Selenium的定位方法获取文本,最后把文本转换成可计算的时间对象,和当前时间对比筛选。

另外,find_elements_byName这类旧方法已经被弃用,现在推荐用find_elements(By.XXX, '定位值')的写法。


完整代码示例

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

# 配置参数
TARGET_URL = "你的Facebook Marketplace目标页面URL"
PAST_DAYS = 2  # 筛选过去2天的商品
PAST_WEEKS = 3  # 筛选过去3周的商品

def parse_marketplace_date(date_text):
    """解析Facebook的日期文本(比如"2小时前"、"1天前"、"1周前")为datetime对象"""
    now = datetime.datetime.now()
    if "小时前" in date_text:
        hours = int(date_text.split("小时前")[0])
        return now - datetime.timedelta(hours=hours)
    elif "天前" in date_text:
        days = int(date_text.split("天前")[0])
        return now - datetime.timedelta(days=days)
    elif "周前" in date_text:
        weeks = int(date_text.split("周前")[0])
        return now - datetime.timedelta(weeks=weeks)
    # 处理具体日期格式(比如"2024年5月1日"),根据实际显示调整
    else:
        return datetime.datetime.strptime(date_text, "%Y年%m月%d日")

# 初始化驱动(这里用Chrome,需提前下载对应版本的chromedriver)
driver = webdriver.Chrome()
driver.get(TARGET_URL)

try:
    # 等待日期元素加载完成(替换成你找到的元素定位器,比如class或xpath)
    date_elements = WebDriverWait(driver, 10).until(
        EC.presence_of_all_elements_located((By.XPATH, "//div[contains(text(), '天前') or contains(text(), '周前') or contains(text(), '小时前')]"))
    )

    # 遍历所有日期元素,筛选符合条件的
    two_days_ago = datetime.datetime.now() - datetime.timedelta(days=PAST_DAYS)
    n_weeks_ago = datetime.datetime.now() - datetime.timedelta(weeks=PAST_WEEKS)

    print("过去2天发布的商品日期:")
    for elem in date_elements:
        date_text = elem.text.strip()
        prod_date = parse_marketplace_date(date_text)
        if prod_date >= two_days_ago:
            print(prod_date.strftime("%Y-%m-%d %H:%M"))

    print("\n过去{}周发布的商品日期:".format(PAST_WEEKS))
    for elem in date_elements:
        date_text = elem.text.strip()
        prod_date = parse_marketplace_date(date_text)
        if prod_date >= n_weeks_ago:
            print(prod_date.strftime("%Y-%m-%d %H:%M"))

finally:
    # 关闭驱动
    driver.quit()

关键注意事项

  • 元素定位更新:Facebook的前端元素类名会频繁变动,你需要自己用浏览器开发者工具重新定位日期元素的正确属性(比如用XPath匹配包含时间关键词的元素)。
  • 反爬机制:访问Facebook需要登录,建议提前在驱动中加载已登录的浏览器配置文件,避免被拦截。
  • 时间解析适配:如果商品显示的是具体日期而非相对时间,需要修改parse_marketplace_date函数的解析格式,匹配实际显示的日期字符串。
  • 等待策略:必须用WebDriverWait等待元素加载,不要用固定sleep,避免因页面加载慢导致元素找不到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:41:08