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

Python使用requests+Selenium爬取动态站点广告链接数据不更新求解

问题核心原因

你的代码存在3个核心错误导致数据无法更新:

  • 你用requests.get获取的是站点静态源码,动态渲染的房屋广告数据requests根本拿不到,而且后续滚动加载新内容后,你始终没有重新获取Selenium渲染后的最新页面源码,一直在复用第一次requests拿到的旧articles列表,所以永远读不到新链接
  • 循环逻辑错误:你遍历的是初始的links_urls,每次追加的还是旧articles的链接,列表只会重复新增旧数据,永远匹配不到你设定的最终校验链接
  • 滚动页面后没有加等待时间,新广告还没渲染完成就执行后续逻辑,就算你拿新源码也可能取不到新数据

修复方案

直接用Selenium拿渲染后的页面源码,每次滚动后重新解析源码、去重存链接,直到命中校验链接为止,修正后的代码如下:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
import time

def get_link_info():
    options = webdriver.ChromeOptions()
    # 可开启无头模式加快运行速度
    # options.add_argument('--headless')
    url = "https://kvartiry-bolgarii.ru/"
    driver = webdriver.Chrome(
        executable_path=r'C:\Users\kk\Desktop\scrape_house\drivers\chromedriver.exe',
        options=options
    )
    driver.get(url)
    # 给初始页面预留加载时间,可根据网络情况调整
    time.sleep(3)
    
    links_urls = []
    check = "https://kvartiry-bolgarii.ru/kvartira-v-elitnom-komplekse-s-unikalynym-sadom-o21751"

    while True:
        # 每次都读取Selenium渲染后的最新页面源码
        page_source = driver.page_source
        soup = BeautifulSoup(page_source, "lxml")
        articles = soup.find_all("div", class_="content")
        
        # 新增链接自动去重,避免重复存入
        for article in articles:
            house_url = article.find("a").get("href")
            if house_url not in links_urls:
                links_urls.append(house_url)
        
        # 校验是否已经爬取到目标最终链接
        if check in links_urls:
            print(links_urls[0], links_urls[-1])
            print("all links are ready")
            break
        
        # 滚动到页面底部触发加载
        html = driver.find_element_by_tag_name('html')
        html.send_keys(Keys.END)
        # 预留加载新广告的时间
        time.sleep(3)
        # 打印进度方便调试
        print(f"当前已爬取链接数:{len(links_urls)},最新链接:{links_urls[-1]}")
    
    # 退出驱动释放资源
    driver.quit()
    return links_urls

额外优化建议

  • 链接去重可以改用set结构,判断存在的效率比列表高很多
  • 可以增加页面高度校验逻辑:如果连续两次滚动后页面高度没有变化,说明已经没有更多新内容,可以直接终止循环,不需要死等校验链接出现
  • 要是对爬取速度有要求,可以直接抓站点的Ajax数据接口,不需要用Selenium滚动,爬取效率会提升数倍

内容的提问来源于stack exchange,提问作者Дмитрий

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:54:03