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

如何用Python抓取JavaScript渲染的法院案件详情页面数据?

抓取JS渲染的法院案件数据方案

由于目标页面的表单和内容由JavaScript动态渲染,普通HTTP请求库(如requests)无法获取渲染后的页面元素,必须使用浏览器自动化工具模拟真实用户操作来抓取数据。以下是两种Python实现方案:


方法一:使用Selenium

Selenium是老牌浏览器自动化工具,支持主流浏览器,适合模拟复杂交互。

前置准备

  • 安装依赖:pip install selenium
  • 下载对应浏览器的驱动(如ChromeDriver,版本需与本地Chrome浏览器匹配,放在Python可调用路径下)

代码示例

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
from selenium.webdriver.support.ui import Select
import time

# 初始化Chrome浏览器
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)  # 设置10秒等待超时

try:
    # 1. 访问目标页面
    driver.get("https://www.claytoncountyga.gov/government/courts/court-case-inquiry/")
    
    # 2. 等待并点击"Name Search"选项
    name_search_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'Name Search')]")))
    name_search_btn.click()
    
    # 3. 选择法院并输入姓名
    # 等待下拉菜单加载,选择Magistrate Court
    court_select = wait.until(EC.presence_of_element_located((By.ID, "courtType")))
    select = Select(court_select)
    select.select_by_visible_text("Magistrate Court")
    
    # 输入姓氏和名字
    last_name_input = wait.until(EC.presence_of_element_located((By.ID, "lastName")))
    last_name_input.send_keys("Smith")
    first_name_input = wait.until(EC.presence_of_element_located((By.ID, "firstName")))
    first_name_input.send_keys("John")
    
    # 4. 点击提交按钮
    submit_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'Submit')]")))
    submit_btn.click()
    
    # 5. 等待案件列表加载,遍历案件编号进入详情页
    case_numbers = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//table//td[1]/a")))
    for case_num in case_numbers:
        # 点击案件编号进入详情页
        case_num.click()
        # 切换到新标签页
        driver.switch_to.window(driver.window_handles[-1])
        
        # 抓取详情页数据
        case_title = driver.title
        case_details = driver.find_element(By.TAG_NAME, "body").text
        print(f"案件标题: {case_title}")
        print(f"案件详情: {case_details[:500]}...")
        
        # 关闭详情页,切回列表页
        driver.close()
        driver.switch_to.window(driver.window_handles[0])
        time.sleep(1)

finally:
    # 关闭浏览器
    driver.quit()

方法二:使用Playwright

Playwright是微软推出的现代自动化工具,自动管理浏览器驱动,支持异步操作,稳定性更好。

前置准备

  • 安装依赖:pip install playwright
  • 安装Chromium浏览器:playwright install chromium

代码示例

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # 启动Chromium浏览器(headless=True则无界面运行)
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    
    try:
        # 1. 访问目标页面
        page.goto("https://www.claytoncountyga.gov/government/courts/court-case-inquiry/")
        
        # 2. 点击"Name Search"选项
        page.click("text=Name Search")
        
        # 3. 选择法院并输入姓名
        page.select_option("#courtType", label="Magistrate Court")
        page.fill("#lastName", "Smith")
        page.fill("#firstName", "John")
        
        # 4. 提交表单
        page.click("text=Submit")
        
        # 5. 遍历案件编号进入详情页
        page.wait_for_selector("table td a")
        case_links = page.query_selector_all("table td a")
        
        for link in case_links:
            # 在新标签页打开详情链接
            with page.context.expect_page() as new_page_info:
                link.click()
            case_page = new_page_info.value
            
            # 抓取详情页数据
            case_title = case_page.title()
            case_details = case_page.locator("body").text_content()
            print(f"案件标题: {case_title}")
            print(f"案件详情: {case_details[:500]}...")
            
            # 关闭详情页
            case_page.close()
    
    finally:
        # 关闭浏览器
        browser.close()

注意事项

  • 元素定位(如ID、XPath)需要根据实际页面DOM结构调整,可通过浏览器开发者工具(F12)查看真实渲染后的元素属性。
  • 优先使用显式等待(如Selenium的WebDriverWait、Playwright的wait_for_selector),避免强制sleep导致的不稳定。
  • 频繁抓取可能触发网站反爬机制,建议添加请求间隔,遵守网站robots.txt规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:46:13