【问题标题】:Scraping data from XML with python使用 python 从 XML 中抓取数据
【发布时间】:2021-01-12 19:20:13
【问题描述】:

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

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

有人知道如何处理吗?

谢谢。

【问题讨论】:

  • 欢迎来到 SO - 请使用 tour 并阅读 How to Ask 以改进、编辑和格式化您的问题。谢谢(显示您编写的代码会很棒)
  • 也许我遗漏了一些东西,但您的 URL 似乎提供的是 JSON,而不是 XML。
  • BS4 对此太过分了。它看起来已经像 JSON - 可能会摆脱 requests 和标准库 json 模块
  • 是的。你说的对。得到了我想要的:` import requests import json url = "kartkatalog.geonorge.no/api/…" json_data = requests.get(url).json() antall = json_data["NumFound"] for i in range(antall): tittel = json_data [“结果”][i][“标题”]打印(标题)`

标签: python xml web-scraping


【解决方案1】:

您发布的链接看起来像 JSON 文件,而不是 XML 文件。你可以看到区别here。你可以使用python中的json模块来解析这些数据。

一旦你从网站上得到一个包含数据的字符串,你可以使用json.loads()将一个包含JSON对象的字符串转换成一个python对象。

下面的代码 sn-p 会将所有标题放在一个名为 titles 的变量中,并将一个 URL 放在 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

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

【讨论】:

    猜你喜欢
    • 2017-07-31
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多