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

如何用Python自动抓取澳大利亚移民局多页签证费用表格?

多页表格抓取解决方案

核心思路

页面的分页是前端动态加载(点击页码/Next后,页面局部刷新表格内容),所以需要用Selenium模拟点击分页按钮,等待页面更新后再抓取对应页的表格数据。结合你提供的分页HTML结构,我们可以通过定位「Next」按钮或直接点击页码来实现翻页。

修改后的完整代码

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 bs4 import BeautifulSoup as bs

# 目标URL
url = "https://immi.homeaffairs.gov.au/visas/getting-a-visa/fees-and-charges/current-visa-pricing"

# 初始化浏览器
driver = webdriver.Chrome()
driver.get(url)
# 等待页面核心表格加载完成
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.TAG_NAME, "table"))
)

# 存储所有页的表格数据
all_table_data = []

# 已知总页数为3,循环处理每一页
for page_num in range(3):
    # 解析当前页表格
    html_str = driver.page_source
    soup = bs(html_str, "html.parser")
    table = soup.find("table")
    if table:
        all_table_data.append(table)
        print(f"已抓取第{page_num+1}页表格")
    
    # 非最后一页则执行翻页
    if page_num < 2:
        try:
            # 等待Next按钮可点击并点击
            next_btn = WebDriverWait(driver, 10).until(
                EC.element_to_be_clickable((By.LINK_TEXT, "Next"))
            )
            next_btn.click()
            # 等待旧表格失效,确保新页面内容加载完成
            WebDriverWait(driver, 10).until(
                EC.staleness_of(table)
            )
        except Exception as e:
            print(f"翻页失败: {e}")
            break

# 关闭浏览器
driver.quit()

# 后续可按需处理数据,示例:打印各页表格内容
for idx, table in enumerate(all_table_data):
    print(f"\n--- 第{idx+1}页表格内容 ---")
    print(table.prettify())

关键说明

  1. 显式等待替代固定sleep:用WebDriverWait等待元素状态变化,避免网络延迟导致的定位失败,比time.sleep()更稳定。
  2. 翻页逻辑:
    • 已知总页数为3,直接循环3次更高效;若不确定总页数,可通过判断「Next」按钮是否存在/可点击来终止循环。
    • 点击Next后,通过staleness_of等待旧表格元素失效,确保新表格已加载。
  3. 元素定位备选方案:如果「Next」按钮文本变化,可改用CSS选择器定位:driver.find_element(By.CSS_SELECTOR, "ul.pagination li:last-child a")。

常见问题处理

  • 按钮点击无反应:添加滚动代码让按钮可见:driver.execute_script("arguments[0].scrollIntoView();", next_btn),再执行点击。
  • 页面加载缓慢:延长显式等待的超时时间(比如从10秒改为15秒)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:26:17