维基百科链接API返回页面上没有的链接

时间:2017-07-03 22:15:40

标签: python wikipedia wikipedia-api mediawiki-api

我正在尝试使用python模块ADATA,它是wikipedia API的包装器。特别是我正在查看links API,根据我的理解,它应该返回“页面上维基百科页面链接的标题列表”,即所有对页面文本中其他维基百科页面的引用。我在询问。当我查看Google上文章的结果时,我会按预期获得list个链接(JSON格式的维基百科标题)。问题是,那里列出的链接似乎没有出现在Google页面上。我想也许它包括谷歌的链接,但这也不起作用,特别是,JSON结构中返回的第三个链接是ADATA。我在Google页面的任何位置都没有看到ADATA的链接,也没有在https://en.wikipedia.org/w/api.php?action=query&titles=Google&prop=links 页面上的任何地方找到指向Google的链接。这是一个错误还是我错过了一些明显的东西?

我相信这个链接足以重现这个问题:

{
    "continue": {
        "plcontinue": "1092923|0|Aardvark_(search_engine)",
        "continue": "||"
    },
    "query": {
        "pages": {
            "1092923": {
                "pageid": 1092923,
                "ns": 0,
                "title": "Google",
                "links": [
                    {
                        "ns": 0,
                        "title": "111 Eighth Avenue"
                    },
                    {
                        "ns": 0,
                        "title": "2600: The Hacker Quarterly"
                    },
                    {
                        "ns": 0,
                        "title": "ADATA"
                    },
. . .

我看到的结果如下:

import wikipedia
wikipedia.page('Google').links

在python中你可以像这样重现:

['111 Eighth Avenue',
 '2600: The Hacker Quarterly',
 'ADATA',
 'AI Challenge',
 'AKM Semiconductor, Inc.',
 'AOL',
 'API.AI',

产生如下输出:

import { Http } from '@angular/http';
import {
  animate,
  Component,
  keyframes,
  state,
  style,
  transition,
  trigger,
} from '@angular/core';

@Component({
  selector: 'card-overview-example',
  templateUrl: 'card-overview-example.html',
  animations: [
    trigger('state', [
      state('open',
        style({
          opacity: 1
        })),
      transition('* => open', [
        animate(200, keyframes([
          style({
            opacity: 1
          }),
        ])),
      ]),
      state('closed',
        style({
          opacity: 0
        })
      ),
    ])
  ]
})
export class CardOverviewExample {
  items = [];
  state;
  constructor(private http: Http) {
   this.getData().subscribe(items => this.items = items.results);
  }
  getData() {
    return this.http.get(`https://swapi.co/api/people/?format=json`)
    .map((res:Response) => res.json());
  }
  showDetails(item) {
    // this.state = (this.state === 'open' ? 'closed' : 'open');
    this.state = (this.state === 'open' ? 'closed' : 'open');
  }
}

2 个答案:

答案 0 :(得分:1)

该列表包含显示在页面的wiki文本中或从wiki文本调用的模板中的链接。每次编辑后,它都会由排队作业更新。由于作业处理的异步性质和失败作业的有限重试次数,列表可能与实际文章内容不同,但不太可能。 (可能有可能添加指向wikitext的链接,以至于它们根本不会出现在文章HTML中,但同样不可能有人真正这样做。)

答案 1 :(得分:0)

在访问页面时,默认情况下,页面似乎有些位不可见。在此示例中,当您点击'显示'时会显示该链接。 "主要信息技术公司"在页面的底部。我相信这应该是我所看到的。

感谢评论中的zwer,指出在哪里可以找到链接。