如何用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
相关产品推荐
相关产品推荐

