wikipedia-api - software - wikipedia api json
¿Cómo obtener Infobox de un artículo de Wikipedia por la API de Mediawiki? (4)
En lugar de analizar los infoboxes, que es bastante complicado, eche un vistazo a DBPedia , que tiene los infobox de Wikipedia extraídos como objetos de la base de datos.
Los artículos de Wikipedia pueden tener plantillas Infobox. Mediante la siguiente llamada, puedo obtener la primera sección de un artículo que incluye Infobox.
http://en.wikipedia.org/w/api.php?action=parse&pageid=568801§ion=0&prop=wikitext
Lo que quiero es una consulta que solo devuelva datos de Infobox. es posible?
Puedes hacerlo con una llamada url a la API de Wikipedia como esta:
http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xmlfm&titles=Scary%20Monsters%20and%20Nice%20Sprites&rvsection=0
Reemplace los titles=
sección con el título de su página, y format=xmlfm
para format=json
si desea que el artículo esté en formato json.
Si la página tiene un cuadro de información en el lado derecho, use esta URL para obtenerla en formato txt. Mi ejemplo es usar el elemento Hidrógeno. Todo lo que necesitas hacer es reemplazar "Hidrógeno" con tu título.
https://en.wikipedia.org/w/index.php?action=raw&title=Template:Infobox%20hydrogen
Si está buscando el formato JSON, use esta URL, pero no es bonito.
https://en.wikipedia.org/w/api.php?action=parse&page=Template:Infobox%20hydrogen&format=json
Sobre la base de la respuesta de @Garry, puede hacer que wikipedia analice el cuadro de información en html para usted a través del parámetro rvparse
así:
http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&titles=Scary%20Monsters%20and%20Nice%20Sprites&rvsection=0&rvparse
Tenga en cuenta que ninguno de los métodos devolverá solo el cuadro de información. Pero a partir del contenido html, puede extraer (a través de, por ejemplo, beautifulsoup) la table
con infobox
clase.
En Python
, haces algo como lo siguiente
resp = requests.get(url).json()
page_one = next(iter(resp[''query''][''pages''].values()))
revisions = page_one.get(''revisions'', [])
html = next(iter(revisions[0].values()))
# now parse the html