有没有人知道如何在不注册Bot帐户的情况下以编程方式从维基共享资源下载图像?似乎获得Bot帐户批准的唯一方法是添加或编辑维基媒体上已有的信息.如果您尝试下载任何图像,没有机器人帐户,使用一些api库,您会收到错误消息而不是图像.好像他们阻止任何不从浏览器进来的人?其他人有这方面的经验吗?我在这里错过了什么吗?
image wikipedia-api mediawiki-api wikimedia-commons pywikibot
例如,使用此Wikipedia转储:
是否有一个现有的Python库,我可以用它来创建一个带有主题和值映射的数组?
例如:
{height_ft,6},{nationality, American}
Run Code Online (Sandbox Code Playgroud) python mediawiki wikipedia-api mediawiki-api wikimedia-dumps
我管理的MediaWiki wiki受到大量垃圾邮件的攻击.我已经设法通过使用扩展来摆脱已经添加到wiki的垃圾邮件页面,但页面的数据仍然存在于wiki的MySQL数据库中.这使数据库膨胀超过3GB.
有没有办法从wiki中永久删除垃圾邮件页面,以便将它们从数据库中完全删除?
我正在尝试使用wikimedia API for wiki commons:
http://commons.wikimedia.org/w/api.php
Run Code Online (Sandbox Code Playgroud)
似乎commons API非常不成熟,并且他们的文档中提到检索许可证和作者信息的可能性是空的.
无论如何我可以使用API检索包含许可信息的段落吗?(例如,本页标题为"许可"的段落).当然我可以下载整个页面并尝试解析它,但是什么是API?
这是使用从MediaWiki API查询返回的结果量填充表/api.php?action=query&list=querypage&qppage=BrokenRedirects.然后将结果数添加到id,例如:
// BrokenRedirects
$.getJSON('/api.php?action=query&list=querypage&qppage=BrokenRedirects&format=json', function (data) {
$('#BrokenRedirects').text(data.query.querypage.results.length);
});
Run Code Online (Sandbox Code Playgroud)
但是,由于它被重复了7次,我将qppage的参数变成了一个数组并使用for循环来缩短整个代码.
var array = ['BrokenRedirects',
'DoubleRedirects',
'Unusedcategories',
'Unusedimages',
'Wantedcategories',
'Wantedfiles',
'Wantedpages',
'Wantedtemplates'];
for (var i = 0; i < array.length; i++) {
$.getJSON('/api.php?action=query&list=querypage&qppage=' + array[i] + '&format=json', function (data) {
$('#' + array[i]).text(data.query.querypage.results.length);
});
}
Run Code Online (Sandbox Code Playgroud)
第一个没有环绕的版本有效.但是当我添加一个循环时它没有.该$getJSON部分执行,但然后无法将结果数据添加到id.我跑了它通过的JSLint其中除了抱怨在一个循环的功能,并宣布var i与var array返回的帮助不大.我对javascript相对缺乏经验,所以想到一个变量不能在循环中使用两次?除此之外,可能与在循环中使用id有关吗?
我一直在寻找一种基于搜索字符串查询维基百科api的方法,以获得具有以下属性的文章列表:
我还必须使用jsonp进行查询.
我尝试过使用list = search参数
但似乎忽略了prop = images,我也尝试使用prop = imageinfo和prop = pageimages进行变换.但他们都给我的结果与使用list = search相同.
我也尝试过action = opensearch
http://en.wikipedia.org/w/api.php?action=opensearch&search=test&limit=10&format=xml
当我设置format = xml时,这正是我想要的,但是当使用format = json时返回一个简单的页面标题数组,因此因为jsonp要求而失败.
还有另一种做法吗?我真的想在一个请求中解决这个问题,而不是使用titles = x | y | z进行第一次搜索请求然后第二次请求图像
我正在学习维基百科REST API,但我找不到合适的选项来获取搜索查询的URL.
这是请求的URL:
http://it.wikipedia.org/w/api.php?action=query&list=search&srsearch=calvino&format=xml&srprop=snippet
Run Code Online (Sandbox Code Playgroud)
此请求仅输出标题和片段,但不输出文章的URL.我已经检查了维基百科API文档的list =搜索查询,但似乎没有选项来获取URL.
最诚挚的问候,Fabio Buda
我试图从WikiMedia API中随机抽取一篇文章,但我的代码似乎只抓取用户对话页...
$(document).ready(function(){
$.getJSON("http://en.wikipedia.org/w/api.php?action=query&generator=random&prop=extracts&exchars=500&format=json&callback=?", function (data) {
console.log(data.query.pages);
});
});
Run Code Online (Sandbox Code Playgroud)
我读到"生成器=随机"拉随机文章,但似乎并非如此.如何让它按预期工作?
我有一套完整的网址
http://en.wikipedia.org/wiki/Episkopi_Bay
http://en.wikipedia.org/wiki/Monte_Lauro
http://en.wikipedia.org/wiki/Lampedusa
http://en.wikipedia.org/wiki/Himera
http://en.wikipedia.org/wiki/Lago_Cecita
http://en.wikipedia.org/wiki/Aspromonte
Run Code Online (Sandbox Code Playgroud)
我想找到这些URL的维基百科pageid.我之前使用过Mediawiki API,但我无法弄清楚如何做到这一点.
我尝试通过获取lastindexof("/")的子字符串和最后一个字符从URL中提取页面标题,然后查询API以获取pageid.
http://en.wikipedia.org/wiki/Episkopi_Bay --> Episkopi_Bay
http://en.wikipedia.org/wiki/Monte_Lauro --> Monte_Lauro
http://en.wikipedia.org/wiki/Lampedusa -- > Lampedusa
http://en.wikipedia.org/wiki/Himera --> Himera
http://en.wikipedia.org/wiki/Lago_Cecita --> Lago_Cecita
http://en.wikipedia.org/wiki/Aspromonte --> Aspromonte
Run Code Online (Sandbox Code Playgroud)
但问题是我的一些链接可能是重定向,因此子字符串可能并不总是页面的标题.
TL; DR:如何从URL中找到维基百科页面的pageid?
我正在尝试编写一个python程序,可以在维基百科上搜索人们的出生和死亡日期.
例如,阿尔伯特爱因斯坦出生于1879年3月14日; 去世:1955年4月18日.
import urllib2
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
infile = opener.open('http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&rvsection=0&titles=Albert_Einstein&format=xml')
page2 = infile.read()
Run Code Online (Sandbox Code Playgroud)
这项工作尽可能地发挥作用.page2是来自Albert Einstein维基百科页面的部分的xml表示.
我看了这个教程,现在我有xml格式的页面... http://www.travisglines.com/web-coding/python-xml-parser-tutorial,但我不明白怎么弄我想要的信息(出生和死亡日期)来自xml.我觉得我必须亲近,但是,我不知道如何从这里开始.
编辑
经过几次回复后,我安装了BeautifulSoup.我现在正处于可以打印的阶段:
import BeautifulSoup as BS
soup = BS.BeautifulSoup(page2)
print soup.getText()
{{Infobox scientist
| name = Albert Einstein
| image = Einstein 1921 portrait2.jpg
| caption = Albert Einstein in 1921
| birth_date = {{Birth date|df=yes|1879|3|14}}
| birth_place = [[Ulm]], [[Kingdom of Württemberg]], [[German Empire]]
| death_date = {{Death date and age|df=yes|1955|4|18|1879|3|14}}
| …Run Code Online (Sandbox Code Playgroud) mediawiki-api ×10
mediawiki ×5
wikipedia ×3
javascript ×2
python ×2
api ×1
image ×1
pywikibot ×1
url ×1