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

BeautifulSoup爬虫中time模块用途及跨网站失效问题求助

在BeautifulSoup爬虫中time模块的用途
  • 控制请求频率:通过time.sleep()设置请求间隔,避免短时间内大量请求触发网站反爬规则,模拟人类浏览的节奏。
  • 等待页面渲染:针对动态加载的页面,在获取源码前等待一段固定时间,确保目标元素完全加载,补充隐式/显式等待的不足。
  • 配合重试逻辑:当请求失败(如超时、返回错误码)时,用time.sleep()设置重试间隔,避免频繁重试给服务器造成压力。
爬虫在部分网站失效的常见原因及解决方案

针对你提供的爬取onthemarket.com的代码,以下是可能的问题及解决方法:

1. 反爬机制拦截

  • Headless模式特征被识别:默认headless模式的Chrome会在User-Agent中带有"HeadlessChrome"标识,容易被网站检测。
    解决:添加自定义User-Agent:
    options.add_argument('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')
    
  • IP被封禁:频繁请求同一网站导致IP被拉黑,无法访问页面。
    解决:使用代理IP池,每次请求切换不同IP地址。
  • 人机验证拦截:网站弹出验证码或滑块验证,Selenium无法自动处理。
    解决:小规模爬取可手动完成验证;大规模爬取可集成验证码识别工具。

2. 动态内容加载不完整

你使用了implicitly_wait(10),但隐式等待仅针对元素查找超时,若页面内容通过AJAX异步加载,可能还未渲染完成就获取了源码。
解决:

  • 使用显式等待,等待目标元素出现后再获取页面源码:
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    # 等待房产卡片元素加载完成
    WebDriverWait(driver, 15).until(
        EC.presence_of_all_elements_located((By.CLASS_NAME, "otm-PropertyCard"))
    )
    html_content = driver.page_source
    
  • 若网站是滚动加载,模拟滚动触发内容加载:
    import time
    # 滚动到页面底部
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)  # 等待滚动后内容渲染
    

3. 页面元素定位失效

网站可能更新了HTML结构,你代码中使用的class名(如otm-PropertyCard isOwu)可能已失效。
解决:

  • 打开浏览器开发者工具,重新定位元素:优先选择静态属性(如data-testid、id)替代动态变化的class名。例如:
    property_cards = soup.find_all('li', attrs={"data-testid": "property-card"})
    
  • 避免依赖包含随机字符的动态class,这类class通常会随网站更新而变化。

4. Selenium环境问题

  • ChromeDriver与浏览器版本不匹配:驱动版本和Chrome版本不一致会导致无法启动浏览器。
    解决:使用webdriver-manager自动管理驱动版本:
    from webdriver_manager.chrome import ChromeDriverManager
    driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
    
  • 驱动权限不足:Linux/macOS下ChromeDriver没有执行权限,导致无法运行。
    解决:执行chmod +x chromedriver赋予执行权限,或用管理员身份运行脚本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:17:23