gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:16:03 26 4
gpt4 key购买 nike

我的问题很简单:如何为以“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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com