通过 python 访问网络托管 GIS 地图 (ESRI) 中的文本数据

Accessing text data in web-hosted GIS Map (ESRI) via python

我想与网络托管的 GIS 地图应用程序交互 here 以抓取其中包含的数据。数据在切换按钮后面。

通常情况下,通过 BeautifulSouprequests.get() 创建网站文本汤足以让文本数据可以解析,但是这种方法 return 是某种 esri脚本,以及所需 html 或文本数据的 none。

已检查所需元素的网站快照:

切换按钮的快照,显示我想要抓取的文本数据:

代码的第一个错误(步骤):

import requests
from bs4 import BeautifulSoup

site = 'https://dwrapps.utah.gov/fishing/fStart'

soup = BeautifulSoup(requests.get(site).text.lower(), 'html.parser')

上述汤的 return 在这里 post 太长了,但是无法访问上面显示的切换后面的 html 数据。

我假设使用 selenium 可以解决问题,但很好奇是否有更简单的方法直接与应用程序交互。

该站点是从 https://dwrapps.utah.gov/fishing/GetRegionReports 获取 json(在 js 函数 getForecastData 中)

因此您可以在请求中使用它:

from json import dump
from typing import List
import requests
url = "https://dwrapps.utah.gov/fishing/GetRegionReports"
json:List[dict] = requests.get(url).json()

with open("gis-output.json","w") as io:
    dump(json,io,ensure_ascii=False,indent=4) # export full json from to the filename gis-output.json

for dt in json:
    reportData = dt.get("reportData",'') # the full text 
    displayName = dt.get("displayName",'')
    # do somthing with the data.
    """
    you can acsses also this fields:
    regionAdm = dt.get("regionAdm",'')
    updateDate = dt.get("updateDate",'')
    dwrRating = dt.get("dwrRating",'')
    ageDays = dt.get("ageDays",'')
    publicCount = dt.get("publicCount",'')
    finalRating = dt.get("finalRating",'')
    lat = dt.get("lat",'')
    lng = dt.get("lng",'')
    """