不学没饭吃 2024-05-30 20:07 采纳率: 68.8%
浏览 50
已结题

Python用selenium爬取网页,换页后数据没更新

selenium爬取网站,用数组保存数据,但在点击标签页内翻页后,无法捕捉到换页后的数据,反而还保存着上一页数据

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-05-30 20:07
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    在使用Selenium进行网页爬取时,如果在翻页后数据没有更新,这通常是因为Selenium没有等待页面加载完成。在进行翻页操作后,需要确保页面元素已经加载完毕,才能正确地获取新的数据。

    以下是一些可能的解决方案:

    1. 等待页面加载:使用Selenium提供的WebDriverWaitexpected_conditions来等待页面元素加载完成。

    2. 显式等待:在执行翻页操作后,使用显式等待直到某个元素出现在页面上,这通常意味着页面已经加载完毕。

    3. 隐式等待:设置一个较长的隐式等待时间,让Selenium在查找元素之前等待页面加载。

    下面是一个使用显式等待的示例代码:

    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
    
    # 启动WebDriver
    driver = webdriver.Chrome()
    
    # 打开目标网页
    driver.get("http://example.com")
    
    # 假设我们有一个翻页按钮
    next_page_button = (By.ID, "next_page_button_id")
    
    # 翻页函数
    def go_to_next_page(driver, button_locator):
        try:
            # 等待翻页按钮出现
            WebDriverWait(driver, 10).until(
                EC.element_to_be_clickable(button_locator)
            )
            # 点击翻页按钮
            next_page_button = driver.find_element(*button_locator)
            next_page_button.click()
            # 等待新页面加载完成,这里以某个特定元素为例
            WebDriverWait(driver, 10).until(
                EC.presence_of_element_located((By.ID, "new_page_element_id"))
            )
        except Exception as e:
            print("Error:", e)
    
    # 循环翻页并获取数据
    while True:
        # 获取当前页面数据
        # ...
        # 调用翻页函数
        go_to_next_page(driver, next_page_button)
        # 检查是否到达最后一页,如果是,则退出循环
        if is_last_page(driver):
            break
    
    # 关闭WebDriver
    driver.quit()
    

    在这个示例中,go_to_next_page函数负责点击翻页按钮并等待新页面加载。WebDriverWait用于设置等待时间(这里设置为10秒),并等待页面上某个元素出现,这个元素应该是新页面加载完成后才会出现的。

    参考资料

    请注意,实际的元素定位器(如By.ID和元素ID)需要根据你正在爬取的特定网页进行调整。此外,确保你的Selenium WebDriver与浏览器版本兼容。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月8日
  • 已采纳回答 5月31日
  • 创建了问题 5月30日