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

使用Selenium+BeautifulSoup爬取无限滚动网站:数据重复且卡在200条

无限滚动爬虫重复数据&爬取停滞问题解决思路

一、先把滚动逻辑改对

无限滚动最容易踩的坑就是没滚到新内容区,或者没等加载完就抓数据,直接导致重复抓取:

  • 别用固定像素滚动,直接滚到页面最底部:
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    
  • 必须等新内容加载完再继续,用页面高度变化做判断(比固定sleep靠谱):
    from selenium.webdriver.support.ui import WebDriverWait
    
    last_height = driver.execute_script("return document.body.scrollHeight")
    while True:
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        # 等页面高度变化,确认新内容加载
        WebDriverWait(driver, 10).until(
            lambda d: d.execute_script("return document.body.scrollHeight") > last_height
        )
        new_height = driver.execute_script("return document.body.scrollHeight")
        # 高度不变就停,说明没新内容了
        if new_height == last_height:
            break
        last_height = new_height
    

二、收集URL时直接去重,别等最后用drop_duplicates

用集合存URL,自动去重,避免重复URL占用资源,也减少后续解析的无用功:

house_urls = set()
# 每次滚动后抓当前页面的URL
current_links = driver.find_elements(By.CSS_SELECTOR, "替换成你实际的房源链接选择器")
for link in current_links:
    url = link.get_attribute("href")
    if url:
        house_urls.add(url)
# 最后转成列表用于解析
house_urls = list(house_urls)

三、排查是不是被反爬卡了

卡在200条大概率是网站限制了,试试这几个操作:

  • 滚动后加个短等待,比如time.sleep(1.5),别太猛刷
  • 换个User-Agent,模拟真实浏览器:
    from selenium.webdriver.chrome.options import Options
    
    opts = Options()
    opts.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")
    driver = webdriver.Chrome(options=opts)
    
  • 检查是否需要登录,有些网站未登录只能看有限内容

四、确认解析用的选择器没问题

如果选择器选到了重复的元素(比如同一个房源有多个相同链接),也会导致重复数据。右键检查房源卡片,确保只抓每个房源唯一的那个链接元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:50:54