获取伦敦境内坐标的所有维基百科文章

时间:2016-02-12 11:52:59

标签: python openstreetmap wikipedia wikipedia-api

一般来说,我想获得所有维基百科文章的链接(和标题)以及伦敦境内的坐标。我尝试使用谷歌,但不幸的是没有适当的搜索条件。任何提示?

London map

2 个答案:

答案 0 :(得分:2)

这只是一个对评论来说太大的想法集合。

你最好的选择可能是DBpedia。它是维基百科的语义镜像,具有比维基百科API更复杂的查询可能性。正如您在this paper中所看到的,它可以处理相当复杂的空间查询,但您需要进入SPARQL。这是该论文的一个数字:

Example SPARQL query

也就是说,维基百科的API为空间查询提供了一个相对较新的功能:Showing nearby wiki information。我认为你不能在多边形中搜索,但这是一个好的开始。

这是我之前写的一篇关于使用mwclient来获取文章坐标的答案,但该用户的优势是可以获得一篇文章清单。

Geonames.org可能有助于将搜索范围缩小到地理定位文章。检查英语维基百科中的806,000个地理定位文章并不算太糟糕。

出于性能原因,为了避免给维基百科的服务器带来麻烦,您可以考虑使用Wikipedia或DBpedia的转储工作。

答案 1 :(得分:1)

看起来像是OpenStreetMap和Overpass API的任务。

为了构建我们的查询,我们转到overpass turbo(Overpass API的一个不错的前端),打开向导并在伦敦输入“wikipedia = *”因为我们对{感兴趣{3}}

自动生成并执行的查询将是这一个。

[out:json][timeout:25];
// fetch area “London” to search in
{{geocodeArea:London}}->.searchArea;
// gather results
(
  // query part for: “wikipedia=*”
  node["wikipedia"](area.searchArea);
  way["wikipedia"](area.searchArea);
  relation["wikipedia"](area.searchArea);
);
// print results
out body;
>;
out skel qt;

这将返回太多元素,也会严重影响浏览器负担。由于超时太低,可能会失败。

我们稍微修改一下。我们增加超时并删除递归步骤(>;),因为我们只对直接结果而不是任何相关对象感兴趣。生成的查询将是这一个:

[out:json][timeout:90];
// fetch area “London” to search in
{{geocodeArea:London}}->.searchArea;
// gather results
(
  // query part for: “wikipedia=*”
  node["wikipedia"](area.searchArea);
  way["wikipedia"](area.searchArea);
  relation["wikipedia"](area.searchArea);
);
// print results
out body;
out skel qt;

您可以查看wikipedia tag

现在有各种选项可以导出它。在立交桥turbo上,您可以转到 export ,并将结果直接保存到文件或获取发送到Overpass API的原始查询。您现在可以直接从python脚本运行此查询。

请注意,有不同的result here可用:JSON,XML和CVS。在维基百科标签旁边,您可能也对output formats感兴趣。

另请注意,这不会让您获得伦敦境内坐标的所有维基百科页面,只是OSM数据库中包含的坐标。