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

如何抓取带ng-scope类的事件历史表格并转为DataFrame?

抓取Angular动态页面表格的解决方案

为什么你的代码没结果?

这个页面用Angular框架动态渲染内容,ng-scope是Angular的作用域标记类——页面初始加载的静态HTML里根本没有表格数据,所有内容都是后续通过JavaScript请求后端接口加载的。requests+BeautifulSoup只能抓取静态HTML,自然找不到目标元素。

方法1:用Selenium模拟浏览器抓取(新手友好)

Selenium可以模拟完整的浏览器环境,等待JavaScript渲染完成后再抓取内容,步骤如下:

  1. 安装依赖
    先装Selenium和对应浏览器驱动(以Chrome为例):

    pip install selenium
    

    ChromeDriver要和你的Chrome版本匹配,下载后放到系统环境变量路径,或者在代码里指定路径。

  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
    import pandas as pd
    
    # 初始化Chrome浏览器
    driver = webdriver.Chrome()
    target_url = "https://portal.assessor.lacounty.gov/parceldetail/2004001003"
    driver.get(target_url)
    
    # 等待表格容器加载(最多等10秒)
    wait = WebDriverWait(driver, 10)
    # 定位带ng-scope的表格容器
    table_wrap = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "ng-scope")))
    
    # 提取表格数据
    table = table_wrap.find_element(By.TAG_NAME, "table")
    rows = table.find_elements(By.TAG_NAME, "tr")
    
    # 处理表头和行数据
    headers = [th.text.strip() for th in rows[0].find_elements(By.TAG_NAME, "th")]
    table_data = []
    for row in rows[1:]:
        cols = [td.text.strip() for td in row.find_elements(By.TAG_NAME, "td")]
        table_data.append(cols)
    
    # 转成DataFrame
    df = pd.DataFrame(table_data, columns=headers)
    print(df)
    
    # 关闭浏览器
    driver.quit()
    

方法2:直接调用后端API(更高效)

打开浏览器开发者工具(F12)→ 切换到Network标签→ 刷新页面,查看XHR/fetch请求,能找到页面加载事件历史的接口(比如这个页面的接口是https://portal.assessor.lacounty.gov/api/Parcel/GetParcelEvents,参数带地块编号ain=2004001003)。直接请求接口拿JSON数据,再转DataFrame,比模拟浏览器快很多。

示例代码:

import requests
import pandas as pd

# 接口地址和参数(实际以抓包结果为准)
api_url = "https://portal.assessor.lacounty.gov/api/Parcel/GetParcelEvents"
params = {"ain": "2004001003"}

# 模拟浏览器请求头,避免被拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

# 发送请求并解析数据
response = requests.get(api_url, params=params, headers=headers)
event_data = response.json()

# 转成DataFrame(假设返回的events字段是表格数据数组)
df = pd.DataFrame(event_data["events"])
print(df)

注意事项

  • Selenium驱动必须和浏览器版本一致,否则会启动失败。
  • 调用API时,若请求被拦截,可从浏览器抓包结果里复制完整的请求头(包括Cookie、Referer等)加到代码里。
  • 不要高频请求网站,遵守网站的反爬规则,避免IP被封禁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:07:45