Python爬取training.gov.au地址标签数据失败求助
解决动态加载页面的地址信息爬取问题
你碰到的核心问题是网页的「Addresses」标签内容是JavaScript动态加载的:用requests获取的静态HTML里只有「Summary」标签的内容,其他标签的数据是用户点击标签后,页面才通过异步请求从后端拉取并渲染出来的,所以BeautifulSoup找不到对应元素。
下面给你一套适合新手的完整解决方案:
解决方案:用Selenium模拟浏览器爬取
Selenium是能模拟真实浏览器操作的工具,可以自动处理JS加载、页面交互,不用手动分析复杂的异步请求,适合快速解决动态内容爬取问题。
步骤1:安装必要工具
- 安装Selenium库:打开命令行,运行
pip install selenium - 下载ChromeDriver(需和你的Chrome浏览器版本对应):
- 查看Chrome版本:打开Chrome → 设置 → 关于Chrome
- 下载对应版本的ChromeDriver,解压后把exe文件放到Python安装目录,或者添加到系统环境变量(这样代码里不用写文件路径)
步骤2:完整爬取代码
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 # 目标网页URL url = 'https://training.gov.au/Organisation/Details/90003' # 初始化Chrome浏览器驱动 driver = webdriver.Chrome() try: # 打开目标网页 driver.get(url) # 等待页面加载完成,点击「Addresses」标签(对应id为rtoDetails-tab-4的元素) # 用WebDriverWait等待元素可点击,避免页面没加载完就操作 address_tab = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, 'rtoDetails-tab-4')) ) address_tab.click() # 等待「Addresses」标签对应的内容加载完成(等待id为rtoDetails-4的元素可见) address_content = WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.ID, 'rtoDetails-4')) ) # 提取并打印内容 print(address_content.text.strip()) finally: # 不管爬取成功与否,最后关闭浏览器,避免残留进程 driver.quit()
代码关键部分解释
webdriver.Chrome():启动Chrome浏览器,模拟真实用户浏览行为WebDriverWait(driver, 10):设置最长等待10秒,直到目标元素满足条件(解决页面加载慢导致找不到元素的问题)EC.element_to_be_clickable:确保标签可点击后再执行点击操作,避免空点击EC.visibility_of_element_located:等待内容区域完全可见,确保动态数据已经渲染完成
为什么之前的requests+BeautifulSoup不行?
用requests获取的是服务器返回的初始静态HTML,你可以打开浏览器的「查看网页源代码」(不是开发者工具的Elements面板)验证:里面只有rtoDetails-1的内容,rtoDetails-4的内容根本不存在——这部分是你点击标签后,页面通过JS发送新请求拿到数据,再动态插入到页面里的,requests无法模拟这个交互过程,所以爬不到。
内容的提问来源于stack exchange,提问作者Chuixi
相关产品推荐
相关产品推荐

