[PYTHON] Grattage 2 Comment gratter

Aidemy 2020/9/30

introduction

Bonjour, c'est Yope! Je suis une école littéraire croustillante, mais j'étais intéressé par les possibilités de l'IA, alors je suis allé à l'école spécialisée en IA "Aidemy" pour étudier. Je voudrais partager les connaissances acquises ici avec vous, et je les ai résumées dans Qiita. Je suis très heureux que de nombreuses personnes aient lu l'article de synthèse précédent. Je vous remercie! Ceci est le deuxième article de grattage. Ravi de vous rencontrer.

Quoi apprendre cette fois ・ Méthode de grattage (reportez-vous à Grattage 1 pour l'exploration préparatoire) ・ Gratter plusieurs pages

Grattage

Méthode de grattage

・ (Revue) Le grattage consiste à acquérir une page Web et à en extraire les données nécessaires. -Il existe deux types de méthodes de scraping: "expression régulière (re module)" ou "utiliser une bibliothèque tierce", mais cette fois c'est une méthode majeure __ "utiliser une bibliothèque tierce" «Le grattage est effectué par la méthode __.

À propos du HTML et du XML

-XML est un langage __markup __ qui crée directement les mêmes pages Web que HTML. Il est plus extensible que HTML. -En HTML et XML, il y a du texte entouré de quelque chose comme ** \ <\ title> **, dont le tout est appelé <strong>element</strong> et <title> est __. Dites tag __. -Il existe également une notation telle que \ <html lang = "ja">, ce qui signifie que l'attribut <strong>lang est ja</strong>, c'est-à-dire que la langue est le japonais. -Dans la bibliothèque "Beautiful Soup" utilisée pour le grattage cette fois, le titre etc. est acquis à partir de ce nom d'élément.</p> <h2>Grattage avec Beautiful Soup (préparation pour analyse)</h2> <p>-Vous pouvez facilement gratter en utilisant la méthode __BeautifulSoup (page web décodée, "parser") <strong>. -</strong> Parser __ est un programme qui analyse (analyse) les chaînes de caractères, et il existe plusieurs types pour chaque fonctionnalité, et l'un d'eux est spécifié. Les exemples incluent "html.parser" qui ne nécessite pas de bibliothèque supplémentaire, "lxml" qui peut traiter à grande vitesse et "xml" qui correspond à XML.</p> <pre><code class="language-python">#Importer des demandes d'exploration et Beautiful Soup pour gratter from bs4 import BeautifulSoup import requests #Obtenir l'URL url=requests.get("https://www.google.co.jp") #Scraping (le décodage est l'url du module de requête.L'analyseur est fait avec du texte"xml"Spécifié comme) soup=BeautifulSoup(url.text,"xml") </code></pre> <h2>Scraping avec BeautifulSoup (extraction des données nécessaires)</h2> <p>-Les données nécessaires peuvent être extraites des données analysées effectuées dans la section précédente. Il existe les deux méthodes suivantes. -Si vous mettez les données analysées dans la variable soup, __soup.find ("nom de balise ou nom d'attribut") __ extraira uniquement le premier élément avec cette balise ou cet attribut. De plus, si la partie de recherche est <strong>find_all</strong>, tous les éléments spécifiés seront répertoriés et extraits. -Si vous voulez extraire de l'attribut de classe, ajoutez _<em>class</em> = "nom d'attribut de classe" __ à l'argument.</p> <p>-Si vous mettez les données analysées dans la variable soup, __soup.selected_one ("CSS selector") __ extraira uniquement le premier élément qui satisfait cela. De plus, si la partie selected_one est <strong>select</strong>, tous les éléments spécifiés seront répertoriés et extraits. -Le sélecteur __CSS est une méthode d'indication d'éléments dans la représentation CSS. __ Vous pouvez également l'utiliser pour spécifier un élément à l'intérieur d'un élément (ex) L'élément h1 à l'intérieur d'un élément body est "body> h1").</p> <p>-Aussi, comme astuce, vous pouvez copier des éléments et des sélecteurs CSS avec les outils de développement de Chrome. Par conséquent, il est possible d'extraire les données souhaitées d'une manière visuellement facile à comprendre sans avoir à se soucier de sortir les données décodées.</p> <pre><code class="language-python">Google_title = soup.find("title") #<title>Google</title> Google_h1 = soup.select("body > h1") #[](La liste vide est sortie car il n'y a pas d'élément h1 de l'élément body) </code></pre> <p>-Si ce qui précède est laissé tel quel, Google_title sera affiché avec la balise de titre attachée, mais en utilisant <strong>text</strong>, seul le texte de ceux-ci peut être obtenu.</p> <pre><code class="language-python">print(Google_title.text) #Google </code></pre> <h2>Gratter plusieurs pages</h2> <p>・ Avec la méthode jusqu'à présent, vous ne pouvez gratter qu'une page à la fois. Si vous voulez gratter plusieurs pages, vous pouvez obtenir l'URL de l'autre page à partir du lien vers l'autre page sur la page supérieure, etc. __ et gratter toutes les URL par un traitement itératif. -Les URL des autres pages peuvent être obtenues avec __top page URL + attribut href (lien de chaque page) __ de l'élément <a>.</p> <pre><code class="language-python">top="http://scraping.aidemy.net" r=requests.get(top) soup=BeautifulSoup(r.text,"lxml") url_lists=[] #Obtenez l'URL d'une autre page à partir du lien #(La méthode consiste à obtenir d'abord toutes les balises, à utiliser get pour coder l'attribut href pour chacune d'elles et à la connecter à topURL pour en faire une URL.) urls = soup.find_all("a") for url in urls: url = top + url.get("href") url_lists.append(url) </code></pre> <p>・ Si vous pouvez obtenir l'URL d'une autre page, effacez-la. Comme mentionné ci-dessus, le scraping doit être effectué pour toutes les URL par un traitement itératif. -Dans ce qui suit, tous les titres de photos (répertoriés dans la balise h3) seront extraits de toutes les pages acquises dans la section précédente, et tous seront acquis et affichés sous forme de liste.</p> <pre><code class="language-python">photo_lists=[] #Après avoir encodé la page obtenue dans la section précédente, grattage du titre de la photo avec Beautiful Soup for url in url_lists: r2=requests.get(url) soup=BeautifulSoup(r2.text,"lxml") photos=soup.find_all("h3") #Ajouter le titre de la photo obtenue en grattant à la liste sans la balise h3 for photo in photos: photo_text=photo.text photo_lists.append(photo_text) print(photo_lists) #['Minim incididunt pariatur', 'Voluptate',...(Abréviation)] </code></pre> <h1>Résumé</h1> <p>-Lors de la capture d'une page explorée, analysez-la d'abord avec la méthode <strong>BeautifulSoup</strong>. -Toutes les données peuvent être extraites des données analysées. Utilisez __find () __ ou __selected_one () __ pour extraire. -Si vous ajoutez <strong>text</strong> aux données extraites, les balises etc. seront omises et seuls les éléments pourront être extraits. -Lorsque vous grattez plusieurs pages à la fois, vous pouvez explorer en extrayant le lien de la page __top, etc. et en le connectant à l'URL de base, donc grattez-le individuellement.</p> <p>Cette fois, c'est fini. Merci d'avoir lu jusqu'ici.</p> <!-- ENDDDDDDDDDDDDDDDDDDDDDDDDDDDDD --> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- post_new_ui_horiz --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-5469278205356604" data-ad-slot="4209814965" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> <div style="margin-top: 30px;"> <div class="link-top" style="margin-top: 1px;"></div> <p> <font size="4">Recommended Posts</font> <!-- BEGIN LINK ************************* --> <div style="margin-top: 10px;"> <a href="/fr/15efc8a4c76ec347fa71">Grattage 2 Comment gratter</a> </div> <div style="margin-top: 10px;"> <a href="/fr/519325bce0b889c0a8ac">Comment mettre fin au grattage de défilement infini de Python</a> </div> <div style="margin-top: 10px;"> <a href="/fr/09aed7b23388190cba23">Comment utiliser Python-shell</a> </div> <div style="margin-top: 10px;"> <a href="/fr/1138e427367e93cd2ab8">Remarques sur l'utilisation de tf.data</a> </div> <div style="margin-top: 10px;"> <a href="/fr/12cde4330e831587fd46">Comment utiliser virtualenv</a> </div> <div style="margin-top: 10px;"> <a href="/fr/1a138c2f22f886573451">Comment utiliser Seaboan</a> </div> <div style="margin-top: 10px;"> <a href="/fr/1f770ae4e04210cfa32f">Comment utiliser la correspondance d'image</a> </div> <div style="margin-top: 10px;"> <a href="/fr/20cd4e7db9a7c3f79f10">Comment utiliser le shogun</a> </div> <div style="margin-top: 10px;"> <a href="/fr/245b1dda77d44f775857">Comment installer Python</a> </div> <div style="margin-top: 10px;"> <a href="/fr/24e6b848761f83514720">Comment utiliser Pandas 2</a> </div> <div style="margin-top: 10px;"> <a href="/fr/2e5ff5bf4ade3f30ac02">Comment lire PyPI</a> </div> <div style="margin-top: 10px;"> <a href="/fr/3261ffa9b67410803443">Comment installer pip</a> </div> <div style="margin-top: 10px;"> <a href="/fr/346cff2d2a0161994d0e">Comment utiliser Virtualenv</a> </div> <div style="margin-top: 10px;"> <a href="/fr/3cc5399e18a7e3f9db86">Comment utiliser numpy.vectorize</a> </div> <div style="margin-top: 10px;"> <a href="/fr/3d56b7f8a34612baa2ee">Comment mettre à jour easy_install</a> </div> <div style="margin-top: 10px;"> <a href="/fr/41456d9fb76d278f0fde">Comment installer Archlinux</a> </div> <div style="margin-top: 10px;"> <a href="/fr/4771111002287dd42de7">Comment utiliser pytest_report_header</a> </div> <div style="margin-top: 10px;"> <a href="/fr/514b633f4c5b7e5c0b62">Premiers pas avec le Web Scraping</a> </div> <div style="margin-top: 10px;"> <a href="/fr/598ec1ea7ce7ed756bbf">Comment redémarrer gunicorn</a> </div> <div style="margin-top: 10px;"> <a href="/fr/5d230501e974dc3758e7">Comment installer python</a> </div> <div style="margin-top: 10px;"> <a href="/fr/5e4c118608c325c1e864">Comment héberger virtuel</a> </div> <div style="margin-top: 10px;"> <a href="/fr/5ead81be176bf803f327">Comment déboguer le sélénium</a> </div> <div style="margin-top: 10px;"> <a href="/fr/6554ce52bd980fab7a11">Comment utiliser partiel</a> </div> <div style="margin-top: 10px;"> <a href="/fr/66809e71caa5924b24a9">Comment utiliser Bio.Phylo</a> </div> <div style="margin-top: 10px;"> <a href="/fr/67e5b23172c978f58960">Comment lire JSON</a> </div> <div style="margin-top: 10px;"> <a href="/fr/6d05a43d6607e4208bc8">Comment utiliser SymPy</a> </div> <div style="margin-top: 10px;"> <a href="/fr/6e43b7928b2e0dc42bb9">Comment récupérer des données de courses de chevaux avec Beautiful Soup</a> </div> <div style="margin-top: 10px;"> <a href="/fr/6f444ea1596506fafe5d">Comment utiliser x-means</a> </div> <div style="margin-top: 10px;"> <a href="/fr/72753b7ac08f0bd4993f">Comment utiliser WikiExtractor.py</a> </div> <div style="margin-top: 10px;"> <a href="/fr/73a41e3f0ca540e28d2e">Comment mettre à jour Spyder</a> </div> <div style="margin-top: 10px;"> <a href="/fr/7852e13ace6de288042f">Comment utiliser IPython</a> </div> <div style="margin-top: 10px;"> <a href="/fr/7b2d461c4a0b3fdc4309">Comment installer BayesOpt</a> </div> <div style="margin-top: 10px;"> <a href="/fr/860e1000852fcf7a9691">Comment utiliser virtualenv</a> </div> <div style="margin-top: 10px;"> <a href="/fr/8c558fa27ea8860978a8">Comment utiliser Matplotlib</a> </div> <div style="margin-top: 10px;"> <a href="/fr/9b4eaee4b3d16f794740">Comment utiliser iptables</a> </div> <div style="margin-top: 10px;"> <a href="/fr/a15658d1dd17c421e1e2">Comment utiliser numpy</a> </div> <div style="margin-top: 10px;"> <a href="/fr/aacd5d1fec600f3af569">Comment utiliser TokyoTechFes2015</a> </div> <div style="margin-top: 10px;"> <a href="/fr/ab90bd40611174c7cb98">Comment utiliser venv</a> </div> <div style="margin-top: 10px;"> <a href="/fr/acdada0c8bf912d269d8">Comment utiliser le dictionnaire {}</a> </div> <div style="margin-top: 10px;"> <a href="/fr/b1b673f530a05ec6b423">Comment utiliser Pyenv</a> </div> <div style="margin-top: 10px;"> <a href="/fr/b33b5c824a56dc89e1f7">Comment faire pousser des fichiers dot</a> </div> <div style="margin-top: 10px;"> <a href="/fr/b98fb6de08b433646082">Comment utiliser la liste []</a> </div> <div style="margin-top: 10px;"> <a href="/fr/bbd8b5860612904deea0">Comment utiliser python-kabusapi</a> </div> <div style="margin-top: 10px;"> <a href="/fr/c2a9f22e0bbacd1e9183">"Comment compter Fukashigi"</a> </div> <div style="margin-top: 10px;"> <a href="/fr/c2b43de4bd3bf57ff5de">Comment installer Nbextensions</a> </div> <div style="margin-top: 10px;"> <a href="/fr/c2ba174a153bbdc5ad22">Comment utiliser OptParse</a> </div> <div style="margin-top: 10px;"> <a href="/fr/d7bb0672a2751a95df80">Comment utiliser le retour</a> </div> <div style="margin-top: 10px;"> <a href="/fr/d91095639578d3ff3ca4">Comment installer Prover9</a> </div> <div style="margin-top: 10px;"> <a href="/fr/dfe10bfcfdd1c61b7a78">Comment utiliser NumPy</a> </div> <div style="margin-top: 10px;"> <a href="/fr/eb39bca9762043601675">Comment utiliser pyenv-virtualenv</a> </div> <div style="margin-top: 10px;"> <a href="/fr/f66629335424868f3f85">Comment utiliser imutils</a> </div> <div style="margin-top: 10px;"> <a href="/fr/2c341c5c8b6be6df06f6">Comment récupérer des données d'image de Flickr avec Python</a> </div> <div style="margin-top: 10px;"> <a href="/fr/434b259e473cc8646e91">Comment récupérer des données de courses de chevaux à l'aide de pandas read_html</a> </div> <div style="margin-top: 10px;"> <a href="/fr/c881f7d9ef5add132c7b">Le grattage avec Python-Selenium est vieux! ?? ・ ・ ・ Comment utiliser Pyppeteer</a> </div> <div style="margin-top: 10px;"> <a href="/fr/0dc321690e00e7ae322b">[2020.8 dernière] Comment installer Python</a> </div> <div style="margin-top: 10px;"> <a href="/fr/13cf2e1dc73b96508314">Comment utiliser Qt Designer</a> </div> <div style="margin-top: 10px;"> <a href="/fr/1429b7529d858ee4177b">[IPython] Comment partager un bloc-notes IPython</a> </div> <!-- END LINK ************************* --> </p> </div> </div> </div> <div class="footer text-center" style="margin-top: 40px;"> <!-- <p> Licensed under cc by-sa 3.0 with attribution required. </p> --> </div> <script src="https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/js/bootstrap.min.js"></script> <script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@10.1.2/build/highlight.min.js"></script> <script> $(document).ready(function() { var cfg_post_height = 60; var cfg_per = 0.51; var ads_obj = $('<ins class="adsbygoogle" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-5469278205356604" data-ad-slot="7950405964"></ins>'); $('pre code').each(function(i, e) {hljs.highlightBlock(e)}); function getDocumentOffsetPosition( el ) { var _x = 0; var _y = 0; while( el && !isNaN( el.offsetLeft ) && !isNaN( el.offsetTop ) ) { _x += el.offsetLeft - el.scrollLeft; _y += el.offsetTop - el.scrollTop; el = el.offsetParent; } return { top: _y, left: _x }; } if ( $( "#article202011" ).length ) { var h1_pos = getDocumentOffsetPosition($('h1')[0]); var footer_pos = getDocumentOffsetPosition($('.link-top')[0]); var post_distance = footer_pos.top - h1_pos.top; // console.log('h1_pos: '+ h1_pos.top); // console.log(cfg_post_height) if((post_distance/h1_pos.top)>=cfg_post_height) { // console.log('tesssssssssssssssssssssssssssssssss'); $( ".container p" ).each(function( index ) { var p_tag_pos = $(this).position().top; var dis = p_tag_pos - h1_pos.top; var per = dis/post_distance; if(per>cfg_per) { ads_obj.insertAfter($(this)); (adsbygoogle = window.adsbygoogle || []).push({}); console.log( index + ": " + $( this ).text() ); return false; } }); } } }); </script> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> <!-- ads --> <script data-ad-client="ca-pub-5469278205356604" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js" type="d7540fe192d881abe59fcf57-text/javascript"></script> <!-- end ads --> </body> </html><script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="0fde9bbbcf97b1ea66659396-|49" defer></script>