获取伦敦内部所有维基百科文章
一般来说,我想要获得伦敦境内所有维基百科文章的链接(和标题)。 我尝试过使用Google,但不幸的是没有提供适当的搜索字词。 任何提示?
这实际上只是一个太大而不能发表评论的想法集合。
你最好的选择可能是DBpedia。 它是维基百科的语义镜像,具有比维基百科的API更复杂的查询可能性。 正如你在本文中看到的那样,它可以处理相当复杂的空间查询,但是你需要进入SPARQL。 这是一篇来自该论文的图:
也就是说,维基百科的API对于空间查询具有相对较新的功能:显示附近的维基信息。 我不认为你可以搜索多边形,但这是一个好的开始。
这是我之前写的关于使用mwclient
从文章中获取坐标的答案,但该用户的优势是拥有要刮掉的文章列表。
Geonames.org可以帮助缩小对地理定位文章的搜索范围。 在英语维基百科中检查806,000个地理定位的文章并不算太坏。
出于性能方面的考虑,为了避免为维基百科的服务器造成麻烦,您可以考虑从维基百科或DBpedia转储中进行工作。
看起来像OpenStreetMap和Overpass API的任务。
为了构建我们的查询,我们转到立交桥turbo(Overpass API的一个很好的前端),打开向导并在伦敦输入“wikipedia = *”,因为我们对维基百科标签感兴趣。
自动生成并执行的查询将是这一个。
[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;
你可以在这里查看结果。
现在有各种选项可以导出它。 在立式turbo上,您可以导出并将结果直接安全地保存到文件中,或者获取发送到立交桥API的原始查询。 你现在可以直接从你的python脚本运行这个查询。
请注意,有不同的输出格式可用:JSON,XML和CVS。 在维基百科标签旁边,您可能也对wikidata标签感兴趣。
另外请注意,这不会让所有维基百科页面在伦敦内部具有坐标,只是包含在OSM数据库中的维基百科页面。
链接地址: http://www.djcxy.com/p/62849.html上一篇: Getting all Wikipedia articles with coordinates inside London
下一篇: Getting a particular image from Wikipedia with BeautifulSoup