如何用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
相关产品推荐
相关产品推荐

