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

如何使用Selenium遍历JS渲染网站分页实现Python爬虫?

解决JavaScript分页爬虫问题:用Selenium爬取目标网站的所有URL

BeautifulSoup只能解析静态HTML,对付JS动态加载的分页确实没用,你选Selenium是对的,下面给你具体的实现步骤和代码,照着来就能搞定。

步骤1:准备环境

  • 安装Selenium:
    pip install selenium
    
  • 下载对应浏览器的驱动(以Chrome为例):找和你Chrome版本匹配的ChromeDriver,把它放到系统PATH目录里,或者在代码里指定驱动路径。

步骤2:核心代码实现

下面是针对目标网站的爬取代码,关键是模拟点击分页按钮,循环提取所有URL:

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
import time

# 初始化浏览器(如果驱动没在PATH里,要指定executable_path参数)
driver = webdriver.Chrome()
# 打开目标页面
driver.get("https://yavapai.arizonataxsale.com/index.cfm?folder=previewitems")

all_urls = set()  # 用集合避免重复URL

while True:
    # 等待页面加载完成,等待条目元素出现
    try:
        WebDriverWait(driver, 10).until(
            EC.presence_of_all_elements_located((By.CSS_SELECTOR, "a[href*='folder=previewdetails']"))
        )
    except:
        # 超时就退出循环
        break

    # 提取当前页面的所有目标URL
    links = driver.find_elements(By.CSS_SELECTOR, "a[href*='folder=previewdetails']")
    for link in links:
        url = link.get_attribute("href")
        if url:
            all_urls.add(url)

    # 尝试点击下一页按钮
    try:
        # 找到下一页按钮(根据网站实际情况调整,这里假设是带"Next"文本的按钮)
        next_button = WebDriverWait(driver, 5).until(
            EC.element_to_be_clickable((By.XPATH, "//a[contains(text(), 'Next')]"))
        )
        # 检查按钮是否可用(有些网站会给不可点击的按钮加disabled类)
        if "disabled" in next_button.get_attribute("class"):
            break
        next_button.click()
        time.sleep(2)  # 给页面加载留时间,也可以用显式等待代替
    except:
        # 找不到下一页按钮,说明到最后一页了
        break

# 关闭浏览器
driver.quit()

# 输出结果
print(f"总共爬取到 {len(all_urls)} 个URL")
for url in all_urls:
    print(url)

关键注意点

  1. 元素定位要准确:打开网站开发者工具,确认目标链接和分页按钮的选择器——比如目标链接都包含folder=previewdetails,所以用a[href*='folder=previewdetails']没问题;如果分页按钮文本不是"Next",要换成网站实际的文本,或是用对应的CSS类、XPath定位。
  2. 优先用显式等待:代码里的time.sleep(2)可以替换成显式等待(比如等待下一页的条目加载完成),这样程序稳定性更高。
  3. 规避反爬:如果网站有反爬机制,可以给浏览器添加无头模式(options.add_argument('--headless=new')),或是自定义User-Agent,模拟真实浏览器请求。
  4. 异常处理兜底:代码里的try-except逻辑,能避免单个页面加载失败导致整个程序崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:54:51