javascript - 维基百科 (API) "List_of"页面内容 - 解析为 JSON

标签 javascript json node.js parsing wikipedia-api

我的问题很简单:如何为以“List of”开头的任何维基百科页面上的所有列表项返回 JSON 结构?如果通过 Wiki API 不可行,那么将 wiki HTML/XML 解析为我需要的内容的最佳方法是什么? (注意解析不一定是完美的)

这些页面大约有 225,000 个,它们似乎大多是这 4 种样式中的一种。例如: https://en.wikipedia.org/wiki/List_of_Star_Trek%3A_The_Next_Generation_episodes https://en.wikipedia.org/wiki/List_of_car_brands https://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States https://en.wikipedia.org/wiki/List_of_FIFA_World_Cup_goalscorers

特别是我想要一些我可以使用的东西,比如:

Star Trek: Next Generation episodes->
  season 1-> 
    Encounter at Farpoint 
    Encounter at Farpoint 
    The Naked Now 
    ... 
  season 2->
    The Child
    Where Silence Has Lease
    Elementary, Dear Data 
    ...
  ...
...

到目前为止,我提出的最接近的解决方案是我需要为每个部分运行的 Axios Wikipedia API 解析调用。此外,尽管设置了 JSON 参数,但对于返回的 JSON 的“文本”属性,我仍然收到 xml 或 HTML 形式的列表项。对于所有不同的页面类型来说,解析这个变得很困难。如果无法返回 JSON,任何有关如何解析多个 wiki 类型列表项的建议都会有所帮助。

对实现我的目标有什么建议吗?我将 VUE.js 与 nodejs 一起使用。

  • 也许他们的图书馆可以提供帮助?
  • 也许在 URL 上获取完整 html 转储的请求会更好?
  • 也许他们只是列表页面的维基转储,我可以将其解析为 firestore?

最佳答案

wiki 数据的概念解决了这个问题,但它仍远未达到成熟水平,无法提供太多值(value)。可能在 3-5 年内,它可以一起避免这个问题。

目前回答这个问题的快速而肮脏的方法是通过 api 获取给定维基百科页面上的所有链接,然后以编程方式过滤或让用户这样做。这是可行的,因为给定列表中的绝大多数星际迷航剧集、总统和汽车品牌都将链接到他们各自的维基百科页面。

我使用以下 API 查询获取维基百科页面上的所有链接(使用 pageid)

    axios({
      method: 'get',
      url: 'https://en.wikipedia.org/w/api.php',
      params: {
        action: 'query',
        format: 'json',
        prop: 'pageterms|pageimages',
        origin: '*',
        generator: 'links',
        gpllimit: '500',
        redirects: 'true',
        pageids: pageidIn,
        piprop: 'thumbnail',
        formatversion: 2
      }

然后保存 response.data.query.pages[i].terms.descriptionresponse.data.query.pages[i].title 到类对象结果

然后我为用户添加了一个额外的搜索字段来过滤他们之前的结果。如果他们输入“episode”,它会得到我需要的东西,因为“episode”这个词通常在页面的 response.data.query.pages[i].terms.description 字段中。

唯一的缺点是此解决方案不会返回没有自己的 wiki 页面的列表结果。但为了简单起见,我会接受这一点。

关于javascript - 维基百科 (API) "List_of"页面内容 - 解析为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51911605/

相关文章:

javascript - 主键整数返回在查找时递增

javascript - AJAX 调用返回的 jQuery 和 $ 未在 like.js.erb 中定义

javascript - 查找具有特定数据属性的元素 jQuery

python - 发送 pathlib.Path 数据到 FastAPI : PosixPath is not JSON serializable

c# - DataContractJsonSerializer 更改我的日期

cJSON打印函数不向对象添加数字

javascript - gulp 模式递归如何工作 **/*

javascript - 异步 $cacheFactory 与 $http 和 $resource

javascript - 用于发布的 Angular Node 模块的版本控制

javascript - 如何使用 startsWith 过滤并获取每个对象键的值?