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

如何对Airbnb进行网络爬取?现有数据集如何获取房源上架日期?

Airbnb相关爬取与数据问题解答

1. 如何对Airbnb平台进行网络爬取?

  • 先确认合规性:先查看Airbnb的robots.txt文件,明确哪些页面允许爬取,避免违反平台规则和法律。
  • 设置合法请求头:发送请求时必须配置真实的User-Agent,模拟普通浏览器请求,否则会被直接拦截。
  • 处理动态渲染内容:Airbnb大量页面内容由JavaScript动态加载,单纯用requests无法获取完整数据,需使用Selenium、Playwright或Scrapy结合Splash这类工具渲染页面。
  • 规避反爬机制:
    • 使用代理IP池,避免单一IP频繁请求被封禁
    • 设置请求延迟,控制请求频率
    • 必要时模拟登录(但登录后爬取需更谨慎,防止账号受限)
  • 提取目标数据:用BeautifulSoup或XPath解析渲染后的页面,定位元素提取所需信息。

2. 现有数据集如何获取房源上架日期?可用哪些字段作为依据?

现有数据集没有直接存储房源上架日期的字段,可通过以下方式和字段尝试获取:

  • 基于评论数据反向推算:
    • 依据字段:last_review、number_of_reviews、reviews_per_month
    • 操作逻辑:假设房源上架后才会收到评论,可通过last_review减去「总评论数 ÷ reviews_per_month」对应的时间,大致推算出最早评论时间,以此近似上架日期。但这种方法存在误差,比如评论频率不稳定时结果偏差较大。
  • 利用房源ID爬取详情页:
    • 依据字段:id(房源ID)
    • 操作逻辑:用房源ID拼接Airbnb房源详情页URL(格式通常为https://www.airbnb.com/rooms/[房源ID]),爬取页面中的上架日期信息(需注意页面结构可能随时更新)。
  • 结合房东信息辅助判断:
    • 依据字段:host_id
    • 操作逻辑:如果能获取房东的注册日期,可辅助判断房源上架的大致时间范围(通常房源上架不会早于房东注册时间),但现有数据集未包含该信息,需额外获取。

3. 提供的爬取代码用法指导

这段代码是用BeautifulSoup静态解析Airbnb房源页面获取上架日期的基础示例,逐行解释和注意事项如下:

  1. 导入依赖库:
    from bs4 import BeautifulSoup
    import requests
    
    导入requests用于发送HTTP请求,BeautifulSoup用于解析HTML内容。
  2. 设置目标URL:
    url = "https://www.airbnb.com/rooms/2732"
    
    指定要爬取的房源详情页URL,替换为目标房源ID即可。
  3. 发送请求获取页面内容:
    response = requests.get(url)
    html_content = response.content
    
    发送GET请求获取页面原始内容,但当前Airbnb会拦截无请求头的requests请求,实际使用时必须添加请求头,示例:
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
    }
    response = requests.get(url, headers=headers)
    
  4. 解析HTML内容:
    soup = BeautifulSoup(html_content, 'html.parser')
    
    用Python内置的html.parser解析器处理页面内容,也可替换为lxml解析器(需提前安装)。
  5. 定位并提取上架日期:
    listing_date = soup.find('span', {'class': 'listing-date'}).text
    
    尝试查找class为listing-date的span元素并提取文本,但Airbnb的页面结构已更新,这个class大概率不存在,实际需要先查看当前房源页面的HTML结构,找到对应上架日期元素的正确选择器(比如XPath或更新后的class/id)。

代码优化建议:

  • 添加异常处理,避免元素找不到时报错:
    try:
        listing_date = soup.find('span', {'class': 'listing-date'}).text
    except AttributeError:
        listing_date = "未找到上架日期"
    
  • 如果静态请求无法获取内容,改用Selenium渲染页面:
    from selenium import webdriver
    from bs4 import BeautifulSoup
    
    driver = webdriver.Chrome()
    driver.get(url)
    soup = BeautifulSoup(driver.page_source, 'html.parser')
    # 后续提取逻辑同上
    driver.quit()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 19:20:05