selenium爬取网站,用数组保存数据,但在点击标签页内翻页后,无法捕捉到换页后的数据,反而还保存着上一页数据
2条回答 默认 最新
阿里嘎多学长 2024-05-30 20:07关注以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:
在使用Selenium进行网页爬取时,如果在翻页后数据没有更新,这通常是因为Selenium没有等待页面加载完成。在进行翻页操作后,需要确保页面元素已经加载完毕,才能正确地获取新的数据。
以下是一些可能的解决方案:
-
等待页面加载:使用Selenium提供的
WebDriverWait和expected_conditions来等待页面元素加载完成。 -
显式等待:在执行翻页操作后,使用显式等待直到某个元素出现在页面上,这通常意味着页面已经加载完毕。
-
隐式等待:设置一个较长的隐式等待时间,让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秒),并等待页面上某个元素出现,这个元素应该是新页面加载完成后才会出现的。参考资料:
- Selenium 官方文档:https://www.selenium.dev/documentation/en/
- 显式等待教程:https://www.geeksforgeeks.org/explicit-wait-in-selenium/
- 隐式等待教程:https://www.geeksforgeeks.org/implicit-wait-in-selenium/
请注意,实际的元素定位器(如
By.ID和元素ID)需要根据你正在爬取的特定网页进行调整。此外,确保你的Selenium WebDriver与浏览器版本兼容。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录-