{"id":2269,"date":"2012-09-19T15:15:25","date_gmt":"2012-09-19T15:15:25","guid":{"rendered":"https:\/\/bitsebots.blogs.sapo.pt\/2269.html"},"modified":"2012-09-19T15:15:25","modified_gmt":"2012-09-19T15:15:25","slug":"tutorial-de-pywikipediabot-ii","status":"publish","type":"post","link":"https:\/\/blog.alchimista.pt\/?p=2269","title":{"rendered":"Tutorial de pywikipediabot &#8211; II"},"content":{"rendered":"<p>\u00a0<\/p>\n<p>No <a href=\"http:\/\/bitsebots.blogs.sapo.pt\/1939.html\">primeiro post<\/a> vimos como de uma forma b\u00e1sica se pode obter o conte\u00fado de uma p\u00e1gina. Infelizmente, na sua utiliza\u00e7\u00e3o tradicional, os bots s\u00e3o utilizados para edi\u00e7\u00f5es massi\u00e7as, ou ent\u00e3o para obter informa\u00e7\u00e3o de um grande n\u00famero de p\u00e1ginas pelo que o script anterior n\u00e3o nos seve, ent\u00e3o vamos interagir com categorias. H\u00e1 um pormenor importante a real\u00e7ar: <span style=\"text-decoration: underline;\">caso se trate de obter informa\u00e7\u00e3o de um grande n\u00famero de p\u00e1ginas, \u00e9 extremamente aconselhado usar dumps<\/span>, que podem ser obtidos em <a href=\"http:\/\/dumps.wikimedia.org\/\">http:\/\/dumps.wikimedia.org\/<\/a>,por exemplo. Mais informa\u00e7\u00e3o pode ser obtida em <a href=\"http:\/\/meta.wikimedia.org\/wiki\/Data_dumps\">Meta:Data dumps<\/a>.<\/p>\n<p>\u00a0<\/p>\n<p>No script seguinte, contaremos os artigos de uma categoria. Obteremos o t\u00edtulo dos artigos, e contaremos os elementos. Relativamente ao script do primeiro post, o c\u00f3digo ficar\u00e1 dentro de uma defini\u00e7\u00e3o ( def main()) para tirar-mos vantagem do wikipedia.stopme(), que basicamente informa o servidor de que o script fez o seu trabalho, interrompendo a liga\u00e7\u00e3o.<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<pre class=\"brush: python;\"> #!\/usr\/bin\/env python\n# -*- coding: utf-8 -*-\n#\n#\t   \n#\t   (C) 2012 Alchimista &lt;alchimistawp@gmail.com&gt;\n#\t\t \n#\t\tDistributed under the terms of the GNU GPL license.\n\nimport sys, os\n\nimport wikipedia\nimport catlib\nimport pagegenerators\n\ndef main():\n\t''' Esta \u00e9 a def onde o nosso script vai estar '''\n\t\n\tsite = wikipedia.Site(\"pt\", \"wikipedia\") # definimos que o site \u00e9 a pt.wp\n\t\n\t'''De seguida, definimos a categoria Ambiente\n\t e obtemos a listagem dos t\u00edtulos dos artigos.\n\t Na demonstra\u00e7\u00e3o o c\u00f3digo est\u00e1 por extenso para\n\t mais f\u00e1cil percep\u00e7\u00e3o, na pr\u00e1tica, bastaria\n\t pages = catlib.Category(site, u\"Ambiente\").articles()\n\t para se obter a listagem\t  \n\t'''\n\tcat = catlib.Category(site, u\"Ambiente\") # Aqui definimos a categoria Ambiente. \n\tcatList = cat.articlesList()\n\n\n\t'''Agora que temos uma listagem,\n\t e antes de contar os elementos,\n\t vamos ver os t\u00edtulos que constam na catList.\n\t \n\t Esta abordagem serve bem para ilustrar este exemplo,\n\t caso fosse para interagir directamente com os artigos,\n\t como veremos noutro post, h\u00e1 abordagens mais eficientes.\n \n\t O primeiro print, ou seja, no caso o objecto page,\n\t \u00e9 um objecto python, enquanto que o segundo print,\n\t o do page.title(), j\u00e1 tem o formato de unicode.\n\t'''\n\t\n\tfor page in catList:\n\t\tprint u\"p\u00e1gina (objecto):\", page\n\t\tprint u\"T\u00edtulo da p\u00e1gina: \", page.title() # mostra o t\u00edtulo do artigo\n\n\n\t''' Por fim, fazemos a contagem dos artigos\t'''\n\t\n\tprint u\"\\n N\u00ba de artigos na categoria: \", len(catList)\n\t\nif __name__ == \"__main__\":\n\ttry:\n\t\tmain()\n\tfinally:\n\t\twikipedia.stopme()\t\n\n<\/pre>\n<p><a href=\"https:\/\/github.com\/alchimista\/pywikipedia-tutorial\">https:\/\/github.com\/alchimista\/pywikipedia-tutorial<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00a0 No primeiro post vimos como de uma forma b\u00e1sica se pode obter o conte\u00fado de uma p\u00e1gina. Infelizmente, na sua utiliza\u00e7\u00e3o tradicional, os bots s\u00e3o utilizados para edi\u00e7\u00f5es massi\u00e7as, ou ent\u00e3o para obter informa\u00e7\u00e3o de um grande n\u00famero de p\u00e1ginas pelo que o script anterior n\u00e3o nos seve, ent\u00e3o vamos interagir com categorias. H\u00e1 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_siteseo_robots_primary_cat":"","pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-2269","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=\/wp\/v2\/posts\/2269","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2269"}],"version-history":[{"count":0,"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=\/wp\/v2\/posts\/2269\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2269"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2269"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2269"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}