【问题标题】:Wikipedia (API) "List_of" page contents - Parse to JSON维基百科(API)“List_of”页面内容 - 解析为 JSON
【发布时间】:2019-01-25 10:53:13
【问题描述】:

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

这些页面大约有 225,000 个,它们似乎大多是这 4 种样式之一。例如: https://en.wikipedia.org/wiki/List_of_Star_Trek%3A_The_Next_Generation_episodeshttps://en.wikipedia.org/wiki/List_of_car_brandshttps://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_Stateshttps://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 的列表页面的 wikidump?

【问题讨论】:

    标签: javascript json node.js parsing wikipedia-api


    【解决方案1】:

    wiki 数据的概念解决了这个问题,但它仍然远未达到成熟水平,无法提供太多价值。大概 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 页面的列表结果。但为了简单起见,我会接受。

    【讨论】:

      猜你喜欢
      • 2015-05-08
      • 2016-07-21
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多