{"id":750,"date":"2017-05-26T14:12:15","date_gmt":"2017-05-26T12:12:15","guid":{"rendered":"http:\/\/perso.ens-lyon.fr\/lise.vaudor\/?p=750"},"modified":"2017-05-29T10:32:04","modified_gmt":"2017-05-29T08:32:04","slug":"scraper-wikipedia","status":"publish","type":"post","link":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/scraper-wikipedia\/","title":{"rendered":"Scraper Wikipedia"},"content":{"rendered":"<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Scraper_Wikipedia\/Lise_Vaudor_headband-1.png\" alt=\"\" \/><\/p>\n<p>Ah, la mine d&rsquo;informations (\u00e0 port\u00e9e de clic) qu&rsquo;est le web! Est-ce que \u00e7a ne vous fait pas r\u00eaver? Moi, si! et c&rsquo;est pourquoi je vais aujourd&rsquo;hui m&rsquo;aventurer \u00e0 faire un peu de webmining.<\/p>\n<p>S&rsquo;il est possible de \u00ab\u00a0scraper\u00a0\u00bb (i.e. \u00ab\u00a0r\u00e2cler\u00a0\u00bb, litt\u00e9ralement) n&rsquo;importe quel site web avec un package comme <code>rvest<\/code> (qui permet de \u00ab\u00a0parser\u00a0\u00bb le html, i.e. de r\u00e9cup\u00e9rer attributs et contenus des diff\u00e9rentes sections de ce type de documents), certains packages peuvent \u00eatre plus pr\u00e9cis\u00e9ment adapt\u00e9s \u00e0 certains sites en particuler.<\/p>\n<p>Je vais ainsi m&rsquo;essayer au scraping du site Wikipedia, et m&rsquo;armer, pour ce faire, du package d\u00e9di\u00e9 nomm\u00e9 <code>WikipediR<\/code>.<\/p>\n<pre><code>library(WikipediR)\n<\/code><\/pre>\n<p>Il existe plusieurs sites Wikipedia en fonction de la <strong>langue<\/strong> que l&rsquo;on consid\u00e8re: par exemple &lsquo;fr.wikipedia.org&rsquo; pour des articles en fran\u00e7ais ou &lsquo;en.wikipedia.org&rsquo; pour des articles en anglais. Notons en outre l&rsquo;existence d&rsquo;autres <strong>projets<\/strong> (\u00e0 divers \u00e9tats d&rsquo;avancement) de la Wikimedia Foundation tels que<\/p>\n<ul>\n<li>&lsquo;wikiquotes&rsquo; (qui recense un certain nombre de citations, par sujets, auteurs ou oeuvres),<\/li>\n<li>&lsquo;wikisource&rsquo; (biblioth\u00e8que de textes libres et gratuits),<\/li>\n<li>&lsquo;wikidata&rsquo; (des donn\u00e9es)<\/li>\n<li>&lsquo;wiktionnaire (un dictionnaire universel)<\/li>\n<li>&lsquo;wikimedia commons&rsquo; (des ressources multimedias, images notamment)<\/li>\n<li>&lsquo;wikiversit\u00e9&rsquo; (des ressources p\u00e9dagogiques)<\/li>\n<li>&lsquo;wikinews&rsquo; (des actualit\u00e9s)<\/li>\n<li>&lsquo;wikispecies&rsquo; (des informations taxonomiques)<\/li>\n<\/ul>\n<p>Toutes les fonctions de scraping du package <code>wikipediR<\/code> ont en commun, de ce fait, les arguments suivants:<\/p>\n<ul>\n<li>la <strong>langue du projet<\/strong>,<\/li>\n<li>le <strong>projet<\/strong> <\/li>\n<li>le <strong>domaine<\/strong> (rempla\u00e7ant \u00e0 la fois langue et projet).<\/li>\n<\/ul>\n<h2>Information sur une page<\/h2>\n<p>R\u00e9cup\u00e9rons tout d&rsquo;abord les <strong>informations relatives \u00e0 une page<\/strong> (disons la page du \u00ab\u00a0Camembert de Normandie\u00a0\u00bb, qui, en tant que monument du patrimoine gastronomique fran\u00e7ais, devrait parler au plus grand nombre -et surtout \u00e0 ma fid\u00e8le lectrice Ginoute-!):<\/p>\n<pre><code>myinfo=page_info(language=\"fr\",\n                 project=\"wikipedia\",\n                 page=\"Camembert de Normandie\")\nprint(str(myinfo))\n\n## List of 2\n##  $ batchcomplete: chr \"\"\n##  $ query        :List of 1\n##   ..$ pages:List of 1\n##   .. ..$ 31542:List of 17\n##   .. .. ..$ pageid              : int 31542\n##   .. .. ..$ ns                  : int 0\n##   .. .. ..$ title               : chr \"Camembert de Normandie\"\n##   .. .. ..$ contentmodel        : chr \"wikitext\"\n##   .. .. ..$ pagelanguage        : chr \"fr\"\n##   .. .. ..$ pagelanguagehtmlcode: chr \"fr\"\n##   .. .. ..$ pagelanguagedir     : chr \"ltr\"\n##   .. .. ..$ touched             : chr \"2017-05-28T11:03:58Z\"\n##   .. .. ..$ lastrevid           : int 133969395\n##   .. .. ..$ length              : int 66903\n##   .. .. ..$ protection          : list()\n##   .. .. ..$ restrictiontypes    :List of 2\n##   .. .. .. ..$ : chr \"edit\"\n##   .. .. .. ..$ : chr \"move\"\n##   .. .. ..$ talkid              : int 2462365\n##   .. .. ..$ fullurl             : chr \"https:\/\/fr.wikipedia.org\/wiki\/Camembert_de_Normandie\"\n##   .. .. ..$ editurl             : chr \"https:\/\/fr.wikipedia.org\/w\/index.php?title=Camembert_de_Normandie&amp;action=edit\"\n##   .. .. ..$ canonicalurl        : chr \"https:\/\/fr.wikipedia.org\/wiki\/Camembert_de_Normandie\"\n##   .. .. ..$ displaytitle        : chr \"Camembert de Normandie\"\n##  - attr(*, \"class\")= chr \"pageinfo\"\n## NULL\n<\/code><\/pre>\n<p>On peut voir ici comment r\u00e9cup\u00e9rer la longueur de l&rsquo;article, son url compl\u00e8te, l&rsquo;identifiant de la derni\u00e8re r\u00e9vision, etc.<\/p>\n<h2>Contenu d&rsquo;une page<\/h2>\n<p>Le contenu d&rsquo;une page est par ailleurs accessible de la mani\u00e8re suivante:<\/p>\n<pre><code>mycontent=page_content(language=\"fr\",\n                       project=\"wikipedia\",\n                       page_name=\"Camembert de Normandie\")\nprint(str(mycontent))\n\n## List of 1\n##  $ parse:List of 4\n##   ..$ title : chr \"Camembert de Normandie\"\n##   ..$ pageid: int 31542\n##   ..$ revid : int 133969395\n##   ..$ text  :List of 1\n##   .. ..$ *: chr \"&lt;div class=\\\"homonymie\\\"&gt;&lt;a href=\\\"\/wiki\/Aide:Homonymie\\\" title=\\\"Aide:Homonymie\\\"&gt;&lt;img alt=\\\"Page d'aide sur l'homonymie\\\" src\"| __truncated__\n##  - attr(*, \"class\")= chr \"pcontent\"\n## NULL\n<\/code><\/pre>\n<p>Voyez notamment cette partie:<\/p>\n<pre><code>mycontent$parse$text$`*`\n<\/code><\/pre>\n<p>On a ici le contenu (en html \u00ab\u00a0brut\u00a0\u00bb) de la page wiki qui nous int\u00e9resse. Pour r\u00e9cup\u00e9rer des \u00e9l\u00e9ments de ce html, on pourrait ainsi utiliser le package <code>rvest<\/code> cit\u00e9 plus haut (cela fera sans doute l&rsquo;objet d&rsquo;un prochain billet).<\/p>\n<p>Mais pour le moment, int\u00e9ressons-nous \u00e0 des informations plus globales quant \u00e0 la page wikipedia qui nous occupe ici&#8230;<\/p>\n<h2>Pages et cat\u00e9gories<\/h2>\n<h1>Pages depuis cat\u00e9gories<\/h1>\n<p>On peut lister l&rsquo;ensemble des pages de la cat\u00e9gorie \u00ab\u00a0Fromage\u00a0\u00bb depuis le site Wikipedia (France) \u00e0 l&rsquo;aide de la fonction <code>pages_in_category()<\/code> (je charge le package <code>dplyr<\/code> pour nettoyer un peu ma table en sortie, avant affichage&#8230;): On peut lister l&rsquo;ensemble des pages de la cat\u00e9gorie \u00ab\u00a0Fromage\u00a0\u00bb depuis le site Wikipedia (France) \u00e0 l&rsquo;aide de la fonction <code>pages_in_category()<\/code> (je charge le package <code>dplyr<\/code> pour nettoyer un peu ma table en sortie, avant affichage&#8230;):<\/p>\n<pre><code>mypages=pages_in_category(language=\"fr\",\n                          project=\"wikipedia\",\n                          categories=\"Fromage\",\n                          clean_response=TRUE)\nlibrary(dplyr)\nprint(select(mypages,title))\n\n##                                                  title\n## 1                                              Fromage\n## 2                                   Fromage industriel\n## 3                                             Bergk\u00e4se\n## 4                             Savencia Fromage &amp; Dairy\n## 5                                Brevibacterium linens\n## 6                                     Cloche \u00e0 fromage\n## 7  Confr\u00e9rie des chevaliers du taste-fromage de France\n## 8                Cooper's Hill Cheese-Rolling and Wake\n## 9                                    Couteau \u00e0 fromage\n## 10                                Fromage \u00e0 p\u00e2te molle\n## 11                                   Fromage de jument\n## 12                                     Fromage fermier\n## 13                                        Fromage fum\u00e9\n## 14                                        Fromage r\u00e2p\u00e9\n## 15                                Fromage triple-cr\u00e8me\n## 16                                     Fromage v\u00e9g\u00e9tal\n## 17                                           Fromarsac\n## 18                                     Groupe Savencia\n## 19                                 Histoire du fromage\n## 20                         International Cheese Awards\n## 21                                 Laiteries Triballat\n## 22                                     Ma\u00eetre fromager\n## 23                            Mus\u00e9e du fromage cheddar\n## 24              Olomouck\u00e9 syrecky (Olomouck\u00e9 tvaru\u009eky)\n## 25                         Paradoxe du fromage \u00e0 trous\n## 26                                           Pivn\u00ed s\u00fdr\n## 27                                   Propionibacterium\n## 28                                              Sirene\n## 29                                         Sma\u009een\u00fd s\u00fdr\n## 30                                Substitut de fromage\n## 31                           Types de p\u00e2tes de fromage\n## 32                                     Tyros\u00e9miophilie\n## 33                 Cat\u00e9gorie:Wikip\u00e9dia:\u00e9bauche fromage\n## 34                    Cat\u00e9gorie:Fabrication du fromage\n## 35                               Cat\u00e9gorie:Fromage AOP\n## 36                     Cat\u00e9gorie:Fromage de lactos\u00e9rum\n## 37                           Cat\u00e9gorie:Fromage fermier\n## 38                               Cat\u00e9gorie:Fromage IGP\n## 39                        Cat\u00e9gorie:Fromage industriel\n## 40                           Cat\u00e9gorie:Fromage laitier\n## 41                         Cat\u00e9gorie:Fromager fran\u00e7ais\n## 42                          Cat\u00e9gorie:Fromage par lait\n## 43                         Cat\u00e9gorie:Liste de fromages\n## 44                  Cat\u00e9gorie:Fromage par type de p\u00e2te\n## 45                          Cat\u00e9gorie:Fromage par pays\n## 46              Cat\u00e9gorie:Sp\u00e9cialit\u00e9 \u00e0 base de fromage\n<\/code><\/pre>\n<p>Alternativement, si l&rsquo;on s&rsquo;int\u00e9resse par exemple au domaine Wikimedia Commons (qui pourrait vous fournir un tas de belles images de fromages), on peut proc\u00e9der comme suit:<\/p>\n<pre><code>mypages=pages_in_category(domain=\"commons.wikimedia.org\/\",\n                          categories=\"Cheese\",\n                          clean_response=TRUE)\nprint(head(select(mypages,title)))\n\n##                        title\n## 1                     Cheese\n## 2  Category:Cheese by colour\n## 3   Category:Cheese by shape\n## 4 Category:Cheese by country\n## 5 Category:Cheese-based food\n## 6    Category:Organic cheese\n<\/code><\/pre>\n<p>Notez que le recours \u00e0 l&rsquo;argument <code>clean_response=TRUE<\/code> permet d&rsquo;obtenir en sortie un r\u00e9sultat tabulaire relativement clair, plut\u00f4t qu&rsquo;une liste&#8230;<\/p>\n<h1>Cat\u00e9gories depuis pages<\/h1>\n<p>Inversement, il est possible de r\u00e9cup\u00e9rer les cat\u00e9gories associ\u00e9es \u00e0 une page \u00e0 l&rsquo;aide de la fonction <code>categories_in_page()<\/code>:<\/p>\n<pre><code>mycategories=categories_in_page(language=\"fr\",\n                              project=\"wikipedia\",\n                              pages=\"Camembert de Normandie\",\n                              clean_response=TRUE)[[1]]\nprint(select(mycategories$categories,title))\n\n##                                        title\n## 1  Cat\u00e9gorie:Appellation fromag\u00e8re fran\u00e7aise\n## 2              Cat\u00e9gorie:Camembert (fromage)\n## 3                      Cat\u00e9gorie:Fromage AOC\n## 4                      Cat\u00e9gorie:Fromage AOP\n## 5              Cat\u00e9gorie:Fromage au lait cru\n## 6         Cat\u00e9gorie:Fromage au lait de vache\n## 7             Cat\u00e9gorie:Fromage de Normandie\n## 8                  Cat\u00e9gorie:Fromage fermier\n## 9                  Cat\u00e9gorie:Fromage laitier\n## 10         Cat\u00e9gorie:Symbole de la Normandie\n<\/code><\/pre>\n<h2>Liens<\/h2>\n<p>Le package <code>wikipediR<\/code> permet \u00e9galement de lister, pour une page donn\u00e9es, les informations relatives<\/p>\n<ul>\n<li>aux liens <strong>de cette page vers d&rsquo;autres pages du m\u00eame domaine<\/strong> (<code>page_links()<\/code>)<\/li>\n<li>aux liens <strong>de cette page vers des pages externes<\/strong> (<code>page_external_links()<\/code>)<\/li>\n<li>aux liens <strong>depuis d&rsquo;autres pages du m\u00eame domaine vers cette page<\/strong> (<code>page_backlinks<\/code>)<\/li>\n<\/ul>\n<h1>Liens vers d&rsquo;autres pages wiki:<\/h1>\n<pre><code>mylinks=page_links(\"fr\",\n                   \"wikipedia\",\n                   page=\"Camembert de Normandie\",\n                   clean_response=TRUE)[[1]]$links\nmylinks=do.call(rbind,mylinks)\nprint(mylinks)\n\n##       ns  title                            \n##  [1,] \"0\" \"1791\"                           \n##  [2,] \"0\" \"1890\"                           \n##  [3,] \"0\" \"1916\"                           \n##  [4,] \"0\" \"1982\"                           \n##  [5,] \"0\" \"1996\"                           \n##  [6,] \"0\" \"2013\"                           \n##  [7,] \"0\" \"AOC\"                            \n##  [8,] \"0\" \"Abondance (fromage)\"            \n##  [9,] \"0\" \"Acide gras insatur\u00e9\"            \n## [10,] \"0\" \"Acides gras satur\u00e9s\"            \n## [11,] \"0\" \"Affinage du fromage\"            \n## [12,] \"0\" \"Alpha-tocoph\u00e9rol\"               \n## [13,] \"0\" \"Ann\u00e9es 1950\"                    \n## [14,] \"0\" \"Ann\u00e9es 1960\"                    \n## [15,] \"0\" \"Appellation d'origine\"          \n## [16,] \"0\" \"Appellation d'origine contr\u00f4l\u00e9e\"\n## [17,] \"0\" \"Appellation d'origine prot\u00e9g\u00e9e\" \n## [18,] \"0\" \"Banon (fromage)\"                \n## [19,] \"0\" \"Basse-Normandie\"                \n## [20,] \"0\" \"Beaufort (fromage)\"             \n## [21,] \"0\" \"Berni\u00e8res-d'Ailly\"              \n## [22,] \"0\" \"Bleu d'Auvergne\"                \n## [23,] \"0\" \"Bleu de Gex\"                    \n## [24,] \"0\" \"Bleu des Causses\"               \n## [25,] \"0\" \"Bleu du Vercors-Sassenage\"      \n## [26,] \"0\" \"Bretonne pie noir\"              \n## [27,] \"0\" \"Brevibacterium linens\"          \n## [28,] \"0\" \"Brie (r\u00e9gion)\"                  \n## [29,] \"0\" \"Brie de Meaux\"                  \n## [30,] \"0\" \"Brie de Melun\"                  \n## [31,] \"0\" \"Brillat-savarin (fromage)\"      \n## [32,] \"0\" \"Brocciu\"                        \n## [33,] \"0\" \"Cab\u00e9cou\"                        \n## [34,] \"0\" \"Cahier des charges\"             \n## [35,] \"0\" \"Caill\u00e9\"                         \n## [36,] \"0\" \"Calcium\"                        \n## [37,] \"0\" \"Calmann-L\u00e9vy\"                   \n## [38,] \"0\" \"Calvados (d\u00e9partement)\"         \n## [39,] \"0\" \"Camembert\"                      \n## [40,] \"0\" \"Camembert (Orne)\"               \n## [41,] \"0\" \"Camembert (fromage)\"            \n## [42,] \"0\" \"Camembert au calvados\"          \n## [43,] \"0\" \"Camembert fermier\"              \n## [44,] \"0\" \"Cantal (fromage)\"               \n## [45,] \"0\" \"Chabichou du Poitou\"            \n## [46,] \"0\" \"Chaource (fromage)\"             \n## [47,] \"0\" \"Charolais (fromage)\"            \n## [48,] \"0\" \"Chevrotin\"                      \n## [49,] \"0\" \"Cholest\u00e9rol\"                    \n## [50,] \"0\" \"Comt\u00e9 (fromage)\"\n<\/code><\/pre>\n<p>La fonction <code>page_links()<\/code> (avec <code>clean_response=TRUE<\/code>) renvoie une liste qui comprend autant d&rsquo;\u00e9l\u00e9ments que de pages indiqu\u00e9es en argument d&rsquo;entr\u00e9e (donc ici, la liste n&rsquo;a qu&rsquo;un seul \u00e9l\u00e9ment correspondant \u00e0 la page \u00ab\u00a0camembert de Normandie\u00a0\u00bb). On r\u00e9cup\u00e8re l&rsquo;\u00e9l\u00e9ment \u00ab\u00a0links\u00a0\u00bb.<\/p>\n<p>Cet \u00e9l\u00e9ment est lui-m\u00eame une liste, comprenant autant d&rsquo;\u00e9l\u00e9ments qu&rsquo;il y a de liens en sortie. Pour mettre le tout sous forme de tableau, on passe l&rsquo;ensemble de ces \u00e9l\u00e9ments comme arguments \u00e0 la fonction <code>rbind()<\/code> (c&rsquo;est \u00e0 \u00e7a que sert la deuxi\u00e8me commande, commen\u00e7ant par <code>do.call()<\/code>).<\/p>\n<p>(Eh oui! le webscraping c&rsquo;est sympa, mais \u00e7a demande d&rsquo;\u00eatre capable de manipuler des listes car on manipule des informations imbriqu\u00e9es, et de tailles variables&#8230;)<\/p>\n<h2>Liens vers des pages externes<\/h2>\n<pre><code>myexternallinks=page_external_links(\"fr\",\n                                    \"wikipedia\",\n                                    page=\"Camembert de Normandie\", \n                                    clean_response=TRUE)[[1]]$extlinks\nprint(data.frame(myexternallinks))\n\n##                                                                                                             myexternallinks\n## 1  http:\/\/alimentation.gouv.fr\/camembert-de-normandie\n## 2  http:\/\/books.google.fr\/books?id=617vdru4xjkC&amp;printsec=frontcover&amp;hl=fr&amp;source=gbs_ge_summary_r&amp;cad=0#v=onepage&amp;q&amp;f=false\n## 3  http:\/\/www.afssa.fr\/TableCIQUAL\/index.htm\n## 4  http:\/\/www.agro-media.fr\/actualite\/leaop-camembert-de-normandie-en-guerre-contre-les-industriels-5791.html\n## 5  http:\/\/www.cnrtl.fr\/lexicographie\/maturation\n## 6  http:\/\/www.cra-normandie.fr\/pac_lait\/mono.pdf\n## 7  http:\/\/www.fromage-normandie.com\/fr\/camembert-normandie\/presentation-camembert.html\n## 8  http:\/\/www.fromage-normandie.com\/fr\/camembert-normandie\/lien-terroir.html\n## 9  http:\/\/www.fromageriegillot.fr\n## 10 http:\/\/www.inao.gouv.fr\/public\/produits\/detailProduit.php?ID_PRODUIT=3270\n<\/code><\/pre>\n<h2>Liens depuis d&rsquo;autres pages wiki:<\/h2>\n<p>On peut \u00e9galement lister les <strong>backlinks<\/strong> i.e. les liens depuis d&rsquo;autres pages, <strong>vers<\/strong> la page du Camembert de Normandie:<\/p>\n<pre><code>mybacklinks=page_backlinks(\"fr\",\n                           \"wikipedia\",\n                           page=\"Camembert de Normandie\",\n                           clean_response=TRUE)\nmybacklinks=do.call(rbind, mybacklinks)\nprint(head(mybacklinks))\n\n##      pageid ns  title                                  \n## [1,] \"393\"  \"0\" \"Basse-Normandie\"                      \n## [2,] \"1095\" \"0\" \"France\"                               \n## [3,] \"1100\" \"0\" \"Liste de fromages fran\u00e7ais\"           \n## [4,] \"2663\" \"0\" \"Reblochon\"                            \n## [5,] \"3752\" \"0\" \"28 avril\"                             \n## [6,] \"7674\" \"1\" \"Discussion:Liste de fromages fran\u00e7ais\"\n<\/code><\/pre>\n<h2>Un exemple d&rsquo;application<\/h2>\n<p>Pour finir, voici un exemple d&rsquo;application (un peu sommaire certes -j&rsquo;esp\u00e8re que la confr\u00e9rie du camembert ne me fustigera pas pour mes m\u00e9thodes discutables et mes conclusions h\u00e2tives!-), mais qui vous permettra peut-\u00eatre un peu de vous \u00ab\u00a0projeter\u00a0\u00bb dans les applications possibles du package <code>WikipediR<\/code>)&#8230;<\/p>\n<p>Mettons que je m&rsquo;int\u00e9resse \u00e0 l&rsquo;ensemble des fromages AOC, et que mon hypoth\u00e8se (chauvine) de travail est que <strong>le camembert de Normandie est celui qui a la plus grande importance patrimoniale<\/strong>. Pour corroborer mon hypoth\u00e8se, je vais m&rsquo;int\u00e9resser aux longueurs des articles wikipedia associ\u00e9s<\/p>\n<pre><code>pages_fromages_AOC= pages_in_category(\"fr\",\n                                      \"wikipedia\",\n                                      categories=\"Fromage AOC\", \n                                      clean_response=TRUE)\nprint(data.frame(pages_fromages_AOC$title))\n\n##     pages_fromages_AOC.title\n## 1    Liste des AOC laiti\u00e8res\n## 2        Abondance (fromage)\n## 3            Banon (fromage)\n## 4         Beaufort (fromage)\n## 5             Berner Alpk\u00e4se\n## 6            Bleu d'Auvergne\n## 7                Bleu de Gex\n## 8           Bleu des Causses\n## 9  Bleu du Vercors-Sassenage\n## 10  Bloderk\u00e4se-Sauerk\u00e4se AOC\n## 11             Brie de Meaux\n## 12             Brie de Melun\n## 13                   Brocciu\n## 14    Camembert de Normandie\n## 15          Cantal (fromage)\n## 16       Chabichou du Poitou\n## 17        Chaource (fromage)\n## 18       Charolais (fromage)\n## 19                 Chevrotin\n## 20           Comt\u00e9 (fromage)\n## 21      Crottin de Chavignol\n## 22                  Emmental\n## 23        \u00c9poisses (fromage)\n## 24 Formaggio d'alpe ticinese\n## 25           Fourme d'Ambert\n## 26      Fourme de Montbrison\n## 27           Glarner Alpk\u00e4se\n## 28            Gruy\u00e8re suisse\n## 29        Laguiole (fromage)\n## 30         Langres (fromage)\n## 31                  L'Etivaz\n## 32         Livarot (fromage)\n## 33       M\u00e2connais (fromage)\n## 34       Maroilles (fromage)\n## 35       Mont d'Or (fromage)\n## 36         Morbier (fromage)\n## 37         Munster (fromage)\n## 38      Neufch\u00e2tel (fromage)\n## 39               Ossau-iraty\n## 40                  P\u00e9lardon\n## 41                   Picodon\n## 42             Pont-l'\u00e9v\u00eaque\n## 43     Pouligny-saint-pierre\n## 44        Raclette (fromage)\n## 45                 Reblochon\n## 46       Rigotte de Condrieu\n## 47      Rocamadour (fromage)\n## 48       Roquefort (fromage)\n## 49            Saint-nectaire\n## 50  Sainte-maure-de-touraine\n<\/code><\/pre>\n<p>Ici j&rsquo;ai r\u00e9cup\u00e9r\u00e9 l&rsquo;<strong>ensemble des titres de pages correspondant \u00e0 la cat\u00e9gorie \u00ab\u00a0Fromage AOC\u00a0\u00bb<\/strong>. Je vais maintenant parcourir ces pages une \u00e0 une et enregistrer leur <strong>longueur<\/strong> dans la variable <code>longueur_pages<\/code><\/p>\n<pre><code>data=data.frame(title=pages_fromages_AOC$title,\n                longueur_pages=rep(NA,nrow(pages_fromages_AOC)),\n                stringsAsFactors=FALSE)\nfor (i in 1:nrow(data)){\n  info=page_info(\"fr\",\n                 \"wikipedia\",\n                 page=data$title[i])\n  data$longueur_pages[i]=info$query$pages[[1]][[\"length\"]]\n}\n\ndata=arrange(data,longueur_pages) %&gt;% mutate(ID=length(title):1)\nprint(head(data))\n\n##                      title longueur_pages ID\n## 1          Glarner Alpk\u00e4se           1078 50\n## 2      M\u00e2connais (fromage)           1704 49\n## 3           Berner Alpk\u00e4se           1893 48\n## 4 Bloderk\u00e4se-Sauerk\u00e4se AOC           2762 47\n## 5        Langres (fromage)           3386 46\n## 6                Chevrotin           3686 45\n<\/code><\/pre>\n<p>Enfin, pour le plaisir des yeux, je produis un graphique pour repr\u00e9senter ces r\u00e9sultats:<\/p>\n<pre><code>library(ggplot2)\np=ggplot(data, aes(x=ID, y=longueur_pages))+\n  geom_bar(aes(fill=title),stat=\"identity\",show.legend=FALSE)+\n  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +\n  scale_x_continuous(labels=data$title, breaks=data$ID)\np\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Scraper_Wikipedia\/longueur_articles-1.png\" alt=\"\" \/><\/p>\n<p>Damned! Il semble qu&rsquo;un (ou plusieurs) contributeur(s) de la page relative au Laguiole ait \u00e9t\u00e9 particuli\u00e8rement inspir\u00e9 (mettant \u00e0 mal mon hypoth\u00e8se quant \u00e0 la longueur de la page \u00ab\u00a0Camembert de Normandie\u00a0\u00bb qui devait exc\u00e9der toutes les autres&#8230;)<\/p>\n<p>A la r\u00e9flexion, je devrais peut-\u00eatre utiliser <strong>une autre m\u00e9trique que la longueur de la page<\/strong> pour caract\u00e9riser l'\u00a0\u00bbimportance patrimoniale\u00a0\u00bb de mes fromages&#8230; Peut-\u00eatre le nombre de liens <em>depuis<\/em> les pages ou <em>vers<\/em> les pages pourrait-il mieux caract\u00e9riser cette importance?<\/p>\n<p>(Voyez la \u00ab\u00a0d\u00e9marche scientifique\u00a0\u00bb: je vais m&rsquo;acharner jusqu&rsquo;\u00e0 r\u00e9ussir \u00e0 prouver mon hypoth\u00e8se ;-))<\/p>\n<pre><code>data=data.frame(data,\n                nb_pages_vers=NA,\n                nb_pages_depuis=NA)\nfor (i in 1:nrow(data)){\n    mybacklinks=page_backlinks(\"fr\",\n                               \"wikipedia\",\n                               page=data$title[i],\n                               limit=500,\n                               clean_response=TRUE)\n    data$nb_pages_depuis[i]=length(mybacklinks)\n    mylinks=page_links(\"fr\",\n                       \"wikipedia\",\n                       page=data$title[i],\n                       limit=500,\n                       clean_response=TRUE)[[1]]$links\n    data$nb_pages_vers[i]=length(mylinks)\n}\nprint(head(arrange(data,desc(nb_pages_vers))))\n\n##                  title longueur_pages ID nb_pages_vers nb_pages_depuis\n## 1          Ossau-iraty          41561  6           500             500\n## 2      Comt\u00e9 (fromage)          61808  3           500             500\n## 3   Laguiole (fromage)         122767  1           467             308\n## 4  Abondance (fromage)          20546  9           390             315\n## 5   Beaufort (fromage)          47885  4           362             369\n## 6 Crottin de Chavignol          16008 13           354             262\n\nprint(head(arrange(data,desc(nb_pages_depuis))))\n\n##                    title longueur_pages ID nb_pages_vers nb_pages_depuis\n## 1            Ossau-iraty          41561  6           500             500\n## 2        Comt\u00e9 (fromage)          61808  3           500             500\n## 3    Roquefort (fromage)          45640  5           237             439\n## 4     Beaufort (fromage)          47885  4           362             369\n## 5              Reblochon          12973 17           230             329\n## 6 Camembert de Normandie          66903  2           172             329\n<\/code><\/pre>\n<p>Une fois de plus, je ne parviens pas ici \u00e0 faire valoir mon point de vue sur le camembert. Est-ce parce que j&rsquo;ai tort (?!), ou bien est-ce \u00e0 cause de l&rsquo;existence d&rsquo;une page \u00ab\u00a0camembert\u00a0\u00bb parall\u00e8le \u00e0 la page \u00ab\u00a0camembert de Normandie\u00a0\u00bb, ou encore est-ce li\u00e9 au caract\u00e8re quelque peu \u00ab\u00a0ubiquiste\u00a0\u00bb\u00a0\u00bb du camembert (qui en ferait un fromage un peu moins \u00ab\u00a0patrimonialement connect\u00e9\u00a0\u00bb sur Wikipedia?). Je ne saurais le dire, en l&rsquo;\u00e9tat, et pour tout vous dire je vais laisser cette question en suspens car ce billet est d\u00e9j\u00e0 tr\u00e8s long!.<\/p>\n<p>En revanche, je ne r\u00e9siste pas \u00e0 la tentation de vous montrer que <strong>\u00e0 l&rsquo;\u00e9tranger<\/strong> au moins, le camembert est bien le fromage-ambassadeur de la France:<\/p>\n<pre><code>pages_French_cheeses=pages_in_category(\"en\",\n                                       \"wikipedia\",\n                                       categories=\"French cheeses\", clean_response=TRUE)\ndata=data.frame(title=pages_French_cheeses$title,\n                longueur_pages=rep(NA,nrow(pages_French_cheeses)),\n                nb_pages_vers=NA,\n                nb_pages_depuis=NA,\n                stringsAsFactors=FALSE)\nfor (i in 1:nrow(data)){\n  info=page_info(\"en\",\n                 \"wikipedia\",\n                 page=data$title[i])\n  data$longueur_pages[i]=info$query$pages[[1]][[\"length\"]]\n  mybacklinks=page_backlinks(\"en\",\n                             \"wikipedia\",\n                             page=data$title[i],\n                             limit=500,\n                             clean_response=TRUE)\n    data$nb_pages_depuis[i]=length(mybacklinks)\n    mylinks=page_links(\"en\",\n                       \"wikipedia\",\n                       page=data$title[i],\n                       limit=500,\n                       clean_response=TRUE)[[1]]$links\n    data$nb_pages_vers[i]=length(mylinks)\n}\n\ndata=arrange(data,desc(longueur_pages)) %&gt;% mutate(ID=length(title):1)\nprint(head(data))\n\n##                    title longueur_pages nb_pages_vers nb_pages_depuis ID\n## 1 List of French cheeses          10595           216             500 50\n## 2                   Brie          10560           124             319 49\n## 3       Bleu des Causses           9333           244             128 48\n## 4              Camembert           8826           118             211 47\n## 5           Comt\u00e9 cheese           6947           102             103 46\n## 6  \u00c9poisses de Bourgogne           5846           113             112 45\n<\/code><\/pre>\n<p>What??? Oh, non!! le fromage fran\u00e7ais qui suscite le plus d&rsquo;explications sur Wikipedia en anglais, ce n&rsquo;est pas le camembert, mais le <strong>brie<\/strong>!!<\/p>\n<p>D\u00e9cidemment, la r\u00e9daction de ce billet m&rsquo;a r\u00e9serv\u00e9 bien des d\u00e9sillusions (sur le monde qui ne se conforme pas \u00e0 mes hypoth\u00e8ses, sur mon acharnement qui se r\u00e9v\u00e8le vain, sur le camembert qui n&rsquo;\u00e9crase pas tout sur son passage).<\/p>\n<p>J&rsquo;esp\u00e8re tout de m\u00eame que ce billet permettra \u00e0 certains d&rsquo;entre vous d&rsquo;envisager de travailler avec les <strong>connaissances collaboratives complexes, mais riches, qu&rsquo;offrent Wikipedia et consorts<\/strong>!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ah, la mine d&rsquo;informations (\u00e0 port\u00e9e de clic) qu&rsquo;est le web! Est-ce que \u00e7a ne vous fait pas r\u00eaver? Moi, si! et c&rsquo;est pourquoi je vais aujourd&rsquo;hui m&rsquo;aventurer \u00e0 faire un peu de webmining. S&rsquo;il est possible de \u00ab\u00a0scraper\u00a0\u00bb (i.e. \u00ab\u00a0r\u00e2cler\u00a0\u00bb, litt\u00e9ralement) n&rsquo;importe quel site web avec un package comme rvest (qui permet de \u00ab\u00a0parser\u00a0\u00bb le html, i.e. de r\u00e9cup\u00e9rer attributs et contenus des diff\u00e9rentes sections de ce type de.. <a href=\"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/scraper-wikipedia\/\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-750","post","type-post","status-publish","format-standard","hentry","category-tous-les-posts"],"_links":{"self":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts\/750","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/comments?post=750"}],"version-history":[{"count":11,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts\/750\/revisions"}],"predecessor-version":[{"id":761,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts\/750\/revisions\/761"}],"wp:attachment":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/media?parent=750"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/categories?post=750"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/tags?post=750"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}