Saltar para: Post [1], Pesquisa e Arquivos [2]

Bits & Bots

Robôs e pedaços de bits do planeta wikimédia e arredores.

Bits & Bots

Robôs e pedaços de bits do planeta wikimédia e arredores.

"Por Jnvalves (Obra do próprio) [CC BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0)], undefined" href="https://commons.wikimedia.org/wiki/File%3AO_Fanal%2C_Ilha_da_Madeira%2C_Portugal.jpg">

Tutorial de pywikipediabot - III

por Alchimista, em 20.09.12

Neste tópico abordaremos outras funcionalidades interessantes do pywikipediabot, nomeadamente a obtenção no namespace de uma página, quer no formato numérico, quer no nome do namespace. Veremos igualmente como obter o título da página principal, ou seja, por exemplo no caso wikipedia:Ajuda/edição, obter wikipedia:Ajuda, ou então somente Ajuda. Há outras formas de filtrar os artigos, por exemplo, se apenas pretendesse-mos os artigos do domínio wikipéda da categoria !Robótica, o módulo pagegenerators tem opções para isso, mas para já, iremos aumentando a complexidade aos poucos.

 

Informação sobre os namespaces pode ser encontrada em Mediawiki.org:Manual:Namespaces, ou Mediawiki.org:Namespaces. Nos projectos locais é frequente usarem para além dos namespaces padrão, formas personalisadas, e, na wikipédia Lusófona por exemplo, a documentação pode ser encontrada em Wikipédia:Domínio.

 

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#	   
#	   (C) 2012 Alchimista <alchimistawp@gmail.com>
#		 
#		Distributed under the terms of the GNU GPL license.

import sys, os

import wikipedia
import catlib
import pagegenerators

def main():
	site = wikipedia.Site("pt", "wikipedia")
	cat = catlib.Category(site, u"!Robótica")
	''' Como explicado anteriormente, temos definido o site e a categoria
		podendo então passar-mos a obter a listagem das páginas,
		onde desta vez usaremos o pagegenerators. Uma opção mais rápida será
		usar igualmente o preloadingGen, bastando para isso
		fazer algo como 
		pages = pagegenerators.PreloadingGenerator(pagegenerators.CategorizedPageGenerator(cat))
		Isto faz com que as páginas sejam carregadas no início, ao contrário
		do script actual, que carrega à medida que forem necessárias. 
	'''
	pages = pagegenerators.CategorizedPageGenerator(cat)
	for page in pages:
		'''Agora que temos a iteração vamos primeiro obter o título
		'''
		print page.title()
		
		''' Com o page.namespace() obtemos o namespace da página
			embora no formato canonico, ou seja, número. Para obter
			o nome do namespace, fazemos o site.namespace().
			Para fazer tudo junto, basta substituir as duas linhas por
			namespace = site.namespace(page.namespace())
		'''
		
		pageNamespaceNumber = page.namespace()
		namespace = site.namespace(pageNamespaceNumber)
		if namespace == u"Ajuda":
			''' Aqui filtramos as páginas que pertencem ao namespace Ajuda
				e obteremos o nome do namespace, assim como as predefinições
				contidas nas páginas. '''
			print len(page.get())
			print u"namespace: ", site.namespace(page.namespace())
			print u"templates: ", page.templates()
		elif namespace == u"Wikipédia":
			''' Neste bloco, apenas os artigos do namespace wikipédia são filtrados,
				e obteremos o namespage e o título do artigo, sem namespace ou subpáginas
				(resumidamente, o título do artigo principal)
			'''
			print u"namespace: ", site.namespace(page.namespace())
			print u"Página principal (título sem subpágina): ", page.sectionFreeTitle()
			print u"Página principal sem título nem namespace: ", page.title(withNamespace=False)
			
			
if __name__ == "__main__":
	try:
		main()
	finally:
		wikipedia.stopme()	

https://github.com/alchimista/pywikipedia-tutorial 

Mais sobre mim

foto do autor

Arquivo

  1. 2016
  2. J
  3. F
  4. M
  5. A
  6. M
  7. J
  8. J
  9. A
  10. S
  11. O
  12. N
  13. D
  14. 2015
  15. J
  16. F
  17. M
  18. A
  19. M
  20. J
  21. J
  22. A
  23. S
  24. O
  25. N
  26. D
  27. 2014
  28. J
  29. F
  30. M
  31. A
  32. M
  33. J
  34. J
  35. A
  36. S
  37. O
  38. N
  39. D
  40. 2013
  41. J
  42. F
  43. M
  44. A
  45. M
  46. J
  47. J
  48. A
  49. S
  50. O
  51. N
  52. D
  53. 2012
  54. J
  55. F
  56. M
  57. A
  58. M
  59. J
  60. J
  61. A
  62. S
  63. O
  64. N
  65. D
  66. 2011
  67. J
  68. F
  69. M
  70. A
  71. M
  72. J
  73. J
  74. A
  75. S
  76. O
  77. N
  78. D