首页 > 解决方案 > 使用 python 从 XML 中抓取数据

问题描述

我想从https://kartkatalog.geonorge.no/api/search?limit=10000&text=&facets[0]name=type&facets[0]value=software&mediatype=xml获取一些数据

我需要的是每条记录的“标题”和“GetCapabilitiesUrl”。我尝试过使用 BeautifulSoup,但找不到获取所需数据的正确方法。

有人知道如何进行吗?

谢谢。

标签: pythonxmlweb-scraping

解决方案


您发布的链接看起来像 JSON 文件,而不是 XML 文件。您可以在这里看到不同之处。您可以使用jsonpython 中的模块来解析这些数据。

从网站获取包含数据的字符串后,您可以使用json.loads()将包含 JSON 对象的字符串转换为 python 对象。

下面的代码片段会将所有标题放在一个名为的变量中titles,并将一个 urls 放在urls

import json
import urllib.request
import ssl

ssl._create_default_https_context = ssl._create_unverified_context
raw_json_string = urllib.request.urlopen("https://kartkatalog.geonorge.no/api/search?limit=10000&text=&facets%5B0%5Dname=type&facets%5B0%5Dvalue=software&mediatype=xml").read()
json_object = json.loads(raw_json_string)

titles = []
urls = []

for record in json_object["Results"]:
    titles.append(record["Title"])
    try:
        urls.append(record["GetCapabilitiesUrl"])
    except:
        pass

在编写代码时,您可以使用在线 JSON 查看器来帮助您找出字典和列表的元素。


推荐阅读