求助:无法使用Beautiful Soup提取新西兰议会法案网页表格
解决新西兰议会法案表格提取问题
问题原因
你用requests获取的是静态HTML,但目标表格是通过JavaScript动态渲染的,静态页面里没有表格数据,所以BeautifulSoup找不到对应元素。
解决方案1:使用Selenium模拟浏览器加载
Selenium会模拟真实浏览器加载页面,等待JS渲染完成后再提取数据:
- 先安装依赖:
pip install selenium pandas
下载对应浏览器的驱动(比如ChromeDriver),确保和浏览器版本匹配,放在可执行路径下。
编写代码:
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 pandas as pd # 初始化Chrome浏览器(其他浏览器同理) driver = webdriver.Chrome() url = "https://bills.parliament.nz/bills-proposed-laws?Tab=All&Period=0&To=2023-05-22&From=2018-01-01&SelectCommittee=a0f103be-0902-4480-9778-93a5229dca71" driver.get(url) # 等待表格加载完成(等待目标表格的tbody节点出现) wait = WebDriverWait(driver, 10) table_body = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "table tbody"))) # 逐行提取表格数据 rows = table_body.find_elements(By.TAG_NAME, "tr") data = [] for row in rows: cols = row.find_elements(By.TAG_NAME, "td") row_data = [col.text.strip() for col in cols] # 提取法案详情链接 link_elem = row.find_element(By.CSS_SELECTOR, "a") row_data.append(link_elem.get_attribute("href")) data.append(row_data) # 获取表头文本 headers = [header.text.strip() for header in driver.find_elements(By.CSS_SELECTOR, "table th")] headers.append("法案链接") # 转换为DataFrame格式 df = pd.DataFrame(data, columns=headers) print(df) # 关闭浏览器 driver.quit()
解决方案2:直接调用后台API(更高效)
通过浏览器开发者工具的网络面板,可以找到页面加载表格数据的API接口,直接请求接口获取JSON数据,无需渲染页面:
import requests import pandas as pd # 从页面网络请求中捕获的API接口 api_url = "https://bills.parliament.nz/api/bills/search" payload = { "tab": "All", "period": 0, "to": "2023-05-22", "from": "2018-01-01", "selectCommittee": "a0f103be-0902-4480-9778-93a5229dca71", "page": 1, "pageSize": 100 # 调整每页数据量,减少分页请求次数 } # 发送POST请求获取数据 response = requests.post(api_url, json=payload) data = response.json() # 提取核心数据转换为DataFrame df = pd.DataFrame(data["items"]) # 按需选择展示列,比如法案名称、状态、提交日期等 print(df[["title", "status", "introducedDate", "lastUpdated"]])
注:API参数可能随网站更新变化,若失效可重新通过浏览器开发者工具查看最新请求参数和接口地址。
内容的提问来源于stack exchange,提问作者Adithyapranav Gupta Kolluru
相关产品推荐
相关产品推荐

