无法使用 lxml 解析 ArcGIS 服务目录站点地图

Can't parse ArcGIS Services Directory sitemap with lxml

我正在尝试解析 ArcGIS 服务目录站点地图中的所有 URL

例如:

http://gisservices.its.ny.gov/arcgis/rest/services/?f=sitemap

使用:

from lxml import etree
from urllib.request import urlopen

xml = urlopen('http://gisservices.its.ny.gov/arcgis/rest/services/?f=sitemap')
tree = etree.parse(xml)

我好像无法迭代元素树,更不用说找到特定的标签了,比如'loc'

我做错了什么或者不符合常规xml?

确保考虑到默认命名空间(请参阅 https://lxml.de/xpathxslt.html#namespaces-and-prefixes)。这是一个例子。

from lxml import etree
from urllib.request import urlopen

req = urlopen("http://gisservices.its.ny.gov/arcgis/rest/services/?f=sitemap")

namespaces = {"sm": "http://www.sitemaps.org/schemas/sitemap/0.9"}

tree = etree.parse(req)

for loc in tree.xpath("//sm:url/sm:loc", namespaces=namespaces):
    print(loc.text)

打印输出...

http://gisservices.its.ny.gov/arcgis/rest/services/BuildingFootprints/FeatureServer
http://gisservices.its.ny.gov/arcgis/rest/services/BuildingFootprints/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/CompositePointLocator/GeocodeServer
http://gisservices.its.ny.gov/arcgis/rest/services/dec_lands/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/dec_trails/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/FindN/GPServer
http://gisservices.its.ny.gov/arcgis/rest/services/gas_station/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Assembly_Districts/FeatureServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Assembly_Districts/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Civil_Boundaries/FeatureServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Civil_Boundaries/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Congressional_Districts/FeatureServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Congressional_Districts/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Exits/FeatureServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Exits/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Hydrography_HollowFill/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Hydrography/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Mesonet/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Place_Points/FeatureServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Place_Points/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Schools/FeatureServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Schools/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Senate_Districts/FeatureServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Senate_Districts/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Streets/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Tax_Parcel_Centroid_Points/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Tax_Parcels_Public/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYS_Tax_Parcels_State_Owned/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYSLayersMap/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/NYSTaxAssessmentLookup/GPServer
http://gisservices.its.ny.gov/arcgis/rest/services/OVS_Sites/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/SAM_Address_Points_Symbolized/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/SAM_Address_Points/MapServer
http://gisservices.its.ny.gov/arcgis/rest/services/Locators/NYPlace/GeocodeServer
http://gisservices.its.ny.gov/arcgis/rest/services/Locators/Street_and_Address_Composite/GeocodeServer
http://gisservices.its.ny.gov/arcgis/rest/services/Locators/Street_NoNum_and_ZipCode_Composite/GeocodeServer
http://gisservices.its.ny.gov/arcgis/rest/services/Utilities/PrintingTools/GPServer
http://gisservices.its.ny.gov/arcgis/rest/services/Utilities/RasterUtilities/GPServer