[PYTHON] Schaben 2 Wie man kratzt

Aidemy 2020/9/30

Einführung

Hallo, es ist ja! Ich bin eine knusprige Literaturschule, aber ich war an den Möglichkeiten der KI interessiert, also ging ich zur AI-spezialisierten Schule "Aidemy", um zu studieren. Ich möchte das hier gewonnene Wissen mit Ihnen teilen und habe es in Qiita zusammengefasst. Ich freue mich sehr, dass viele Menschen den vorherigen zusammenfassenden Artikel gelesen haben. Vielen Dank! Dies ist der zweite Beitrag zum Schaben. Freut mich, dich kennenzulernen.

Was diesmal zu lernen ・ Schabemethode (Informationen zum vorbereitenden Kriechen finden Sie unter Schaben 1) ・ Mehrere Seiten verschrotten

Schaben

Kratzmethode

・ (Überprüfen) Beim Scraping wird eine Webseite erfasst und die erforderlichen Daten daraus extrahiert. -Es gibt zwei Arten von Scraping-Methoden: "regulärer Ausdruck (Re-Modul)" oder "Bibliothek eines Drittanbieters verwenden", diesmal jedoch eine wichtige Methode __ "Bibliothek eines Drittanbieters verwenden" "Das Scraping erfolgt nach der __- Methode.

Über HTML und XML

-XML ist eine __markup-Sprache __, die direkt dieselben Webseiten wie HTML erstellt. Es ist erweiterbarer als HTML. -In HTML und XML gibt es Text, der von etwas wie ** \ <\ title> ** umgeben ist, von dem das Ganze <strong>element</strong> heißt und <title> __ ist. Sagen Sie Tag __. -Es gibt auch eine Notation wie \ <html lang = "ja">, was bedeutet, dass das <strong>lang-Attribut ja</strong> ist, dh die Sprache ist Japanisch. -In der Bibliothek "Beautiful Soup", die dieses Mal zum Scraping verwendet wird, wird der Titel usw. von diesem Elementnamen erfasst.</p> <h2>Schaben mit schöner Suppe (Vorbereitung für die Analyse)</h2> <ul> <li>Mit der Methode <strong>BeautifulSoup (dekodierte Webseite, "Parser") __ können Sie problemlos kratzen. -</strong> Parser __ ist ein Programm, das Zeichenfolgen analysiert (analysiert). Für jedes Feature gibt es mehrere Typen, von denen einer angegeben ist. Beispiele sind "html.parser", für das keine zusätzliche Bibliothek erforderlich ist, "lxml", das mit hoher Geschwindigkeit verarbeitet werden kann, und "xml", das XML entspricht.</li> </ul> <pre><code class="language-python">#Importieren Sie Anfragen zum Crawlen und Schöne Suppe zum Kratzen from bs4 import BeautifulSoup import requests #URL abrufen url=requests.get("https://www.google.co.jp") #Scraping (Decodierung ist die URL des Anforderungsmoduls.Der Parser ist mit Text fertig"xml"Angegeben als) soup=BeautifulSoup(url.text,"xml") </code></pre> <h2>Scraping mit BeautifulSoup (Extrahieren der erforderlichen Daten)</h2> <ul> <li>Notwendige Daten können aus den im vorherigen Abschnitt durchgeführten analysierten Daten extrahiert werden. Es gibt die folgenden zwei Methoden. -Wenn Sie die analysierten Daten in die Variableoup einfügen, extrahiert __soup.find ("Tag-Name oder Attributname") __ nur das erste Element mit diesem Tag oder Attribut. Wenn der Suchteil <strong>find_all</strong> lautet, werden alle angegebenen Elemente aufgelistet und extrahiert. -Wenn Sie vom Klassenattribut kratzen möchten, fügen Sie dem Argument _<em>class</em> = "Klassenattributname" __ hinzu.</li> </ul> <p>-Wenn Sie die analysierten Daten in die Variable suppe einfügen, extrahiert __soup.selected_one ("CSS-Selektor") __ nur das erste Element, das dies erfüllt. Wenn der Teil selected_one <strong>select</strong> ist, werden alle angegebenen Elemente aufgelistet und extrahiert. -Der __CSS-Selektor ist eine Methode zum Anzeigen von Elementen in der CSS-Darstellung. __ Sie können dies auch verwenden, um ein Element innerhalb eines Elements anzugeben (z. B.). Das h1-Element innerhalb eines body-Elements ist "body> h1".</p> <ul> <li>Als Trick können Sie auch Elemente und CSS-Selektoren mit den Entwicklertools von Chrome kopieren. Daher ist es möglich, die gewünschten Daten auf visuell leicht verständliche Weise zu extrahieren, ohne sich die Mühe machen zu müssen, die decodierten Daten auszugeben.</li> </ul> <pre><code class="language-python">Google_title = soup.find("title") #<title>Google</title> Google_h1 = soup.select("body > h1") #[](Eine leere Liste wird ausgegeben, da kein h1-Element des body-Elements vorhanden ist) </code></pre> <p>-Wenn das Obige unverändert bleibt, wird Google_title mit dem angehängten Titel-Tag ausgegeben. Mit <strong>text</strong> kann jedoch nur der Text dieser Tags abgerufen werden.</p> <pre><code class="language-python">print(Google_title.text) #Google </code></pre> <h2>Mehrere Seiten verschrotten</h2> <p>・ Mit der bisherigen Methode können Sie jeweils nur eine Seite kratzen. Wenn Sie mehrere Seiten kratzen möchten, können Sie die URL der anderen Seite über den Link zur anderen Seite auf der oberen Seite usw. abrufen und alle URLs durch iterative Verarbeitung kratzen. -Die URLs anderer Seiten können mit __top page URL + href-Attribut (Link jeder Seite) __ des <a> -Elements abgerufen werden.</p> <pre><code class="language-python">top="http://scraping.aidemy.net" r=requests.get(top) soup=BeautifulSoup(r.text,"lxml") url_lists=[] #Rufen Sie die URL einer anderen Seite über den Link ab #(Die Methode besteht darin, zuerst alle Tags abzurufen, mit get das href-Attribut für jedes zu codieren und es mit topURL zu verbinden, um daraus eine URL zu machen.) urls = soup.find_all("a") for url in urls: url = top + url.get("href") url_lists.append(url) </code></pre> <p>・ Wenn Sie die URL einer anderen Seite erhalten können, kratzen Sie sie tatsächlich ab. Wie oben erwähnt, sollte das Scraping für alle URLs durch iterative Verarbeitung durchgeführt werden.</p> <ul> <li>Im Folgenden werden alle Fototitel (im h3-Tag aufgeführt) von allen im vorherigen Abschnitt erfassten Seiten entfernt und alle erfasst und als Liste angezeigt.</li> </ul> <pre><code class="language-python">photo_lists=[] #Nachdem Sie die im vorherigen Abschnitt erhaltene Seite codiert haben, kratzen Sie den Titel des Fotos mit Beautiful Soup ab for url in url_lists: r2=requests.get(url) soup=BeautifulSoup(r2.text,"lxml") photos=soup.find_all("h3") #Fügen Sie den Titel des Fotos hinzu, das Sie erhalten haben, indem Sie ihn ohne das h3-Tag in die Liste aufnehmen for photo in photos: photo_text=photo.text photo_lists.append(photo_text) print(photo_lists) #['Minim incididunt pariatur', 'Voluptate',...(Abkürzung)] </code></pre> <h1>Zusammenfassung</h1> <ul> <li>Wenn Sie eine gecrawlte Seite kratzen, analysieren Sie sie zuerst mit der Methode <strong>BeautifulSoup</strong>. -Alle Daten können aus den analysierten Daten extrahiert werden. Verwenden Sie zum Extrahieren __find () __ oder __selected_one () __. -Wenn Sie den extrahierten Daten <strong>text</strong> hinzufügen, werden Tags usw. weggelassen und nur die Elemente können extrahiert werden.</li> <li>Wenn Sie mehrere Seiten gleichzeitig kratzen, können Sie crawlen, indem Sie den Link von der __top-Seite usw. extrahieren und mit der Basis-URL verbinden. Kratzen Sie ihn also einzeln.</li> </ul> <p>Diese Zeit ist vorbei. Vielen Dank, dass Sie so weit gelesen haben.</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="/de/15efc8a4c76ec347fa71">Schaben 2 Wie man kratzt</a> </div> <div style="margin-top: 10px;"> <a href="/de/519325bce0b889c0a8ac">So beenden Sie Pythons unendliches Scroll-Scraping</a> </div> <div style="margin-top: 10px;"> <a href="/de/09aed7b23388190cba23">Wie benutzt man Python-Shell</a> </div> <div style="margin-top: 10px;"> <a href="/de/1138e427367e93cd2ab8">Hinweise zur Verwendung von tf.data</a> </div> <div style="margin-top: 10px;"> <a href="/de/12cde4330e831587fd46">Verwendung von virtualenv</a> </div> <div style="margin-top: 10px;"> <a href="/de/1a138c2f22f886573451">Wie benutzt man Seaboan?</a> </div> <div style="margin-top: 10px;"> <a href="/de/1f770ae4e04210cfa32f">Verwendung von Image-Match</a> </div> <div style="margin-top: 10px;"> <a href="/de/20cd4e7db9a7c3f79f10">Wie man Shogun benutzt</a> </div> <div style="margin-top: 10px;"> <a href="/de/245b1dda77d44f775857">So installieren Sie Python</a> </div> <div style="margin-top: 10px;"> <a href="/de/24e6b848761f83514720">Verwendung von Pandas 2</a> </div> <div style="margin-top: 10px;"> <a href="/de/2e5ff5bf4ade3f30ac02">Wie man PyPI liest</a> </div> <div style="margin-top: 10px;"> <a href="/de/3261ffa9b67410803443">So installieren Sie pip</a> </div> <div style="margin-top: 10px;"> <a href="/de/346cff2d2a0161994d0e">Verwendung von Virtualenv</a> </div> <div style="margin-top: 10px;"> <a href="/de/3cc5399e18a7e3f9db86">Verwendung von numpy.vectorize</a> </div> <div style="margin-top: 10px;"> <a href="/de/3d56b7f8a34612baa2ee">So aktualisieren Sie easy_install</a> </div> <div style="margin-top: 10px;"> <a href="/de/41456d9fb76d278f0fde">So installieren Sie archlinux</a> </div> <div style="margin-top: 10px;"> <a href="/de/4771111002287dd42de7">Verwendung von pytest_report_header</a> </div> <div style="margin-top: 10px;"> <a href="/de/514b633f4c5b7e5c0b62">Erste Schritte mit Web Scraping</a> </div> <div style="margin-top: 10px;"> <a href="/de/598ec1ea7ce7ed756bbf">Wie man Gunicorn neu startet</a> </div> <div style="margin-top: 10px;"> <a href="/de/5d230501e974dc3758e7">So installieren Sie Python</a> </div> <div style="margin-top: 10px;"> <a href="/de/5e4c118608c325c1e864">Wie zum virtuellen Host</a> </div> <div style="margin-top: 10px;"> <a href="/de/5ead81be176bf803f327">Wie man Selen debuggt</a> </div> <div style="margin-top: 10px;"> <a href="/de/6554ce52bd980fab7a11">Wie man teilweise verwendet</a> </div> <div style="margin-top: 10px;"> <a href="/de/66809e71caa5924b24a9">Wie man Bio.Phylo benutzt</a> </div> <div style="margin-top: 10px;"> <a href="/de/67e5b23172c978f58960">Wie man JSON liest</a> </div> <div style="margin-top: 10px;"> <a href="/de/6d05a43d6607e4208bc8">Verwendung von SymPy</a> </div> <div style="margin-top: 10px;"> <a href="/de/6e43b7928b2e0dc42bb9">So kratzen Sie Pferderenndaten mit Beautiful Soup</a> </div> <div style="margin-top: 10px;"> <a href="/de/6f444ea1596506fafe5d">Wie man x-means benutzt</a> </div> <div style="margin-top: 10px;"> <a href="/de/72753b7ac08f0bd4993f">Verwendung von WikiExtractor.py</a> </div> <div style="margin-top: 10px;"> <a href="/de/73a41e3f0ca540e28d2e">So aktualisieren Sie Spyder</a> </div> <div style="margin-top: 10px;"> <a href="/de/7852e13ace6de288042f">Verwendung von IPython</a> </div> <div style="margin-top: 10px;"> <a href="/de/7b2d461c4a0b3fdc4309">So installieren Sie BayesOpt</a> </div> <div style="margin-top: 10px;"> <a href="/de/860e1000852fcf7a9691">Verwendung von virtualenv</a> </div> <div style="margin-top: 10px;"> <a href="/de/8c558fa27ea8860978a8">Wie benutzt man Matplotlib?</a> </div> <div style="margin-top: 10px;"> <a href="/de/9b4eaee4b3d16f794740">Verwendung von iptables</a> </div> <div style="margin-top: 10px;"> <a href="/de/a15658d1dd17c421e1e2">Wie benutzt man numpy?</a> </div> <div style="margin-top: 10px;"> <a href="/de/aacd5d1fec600f3af569">Verwendung von TokyoTechFes2015</a> </div> <div style="margin-top: 10px;"> <a href="/de/ab90bd40611174c7cb98">Wie benutzt man venv</a> </div> <div style="margin-top: 10px;"> <a href="/de/acdada0c8bf912d269d8">Verwendung des Wörterbuchs {}</a> </div> <div style="margin-top: 10px;"> <a href="/de/b1b673f530a05ec6b423">Wie benutzt man Pyenv?</a> </div> <div style="margin-top: 10px;"> <a href="/de/b33b5c824a56dc89e1f7">Wie man Dotfiles züchtet</a> </div> <div style="margin-top: 10px;"> <a href="/de/b98fb6de08b433646082">Verwendung der Liste []</a> </div> <div style="margin-top: 10px;"> <a href="/de/bbd8b5860612904deea0">Wie man Python-Kabusapi benutzt</a> </div> <div style="margin-top: 10px;"> <a href="/de/c2a9f22e0bbacd1e9183">"Wie man Fukashigi zählt"</a> </div> <div style="margin-top: 10px;"> <a href="/de/c2b43de4bd3bf57ff5de">So installieren Sie Nbextensions</a> </div> <div style="margin-top: 10px;"> <a href="/de/c2ba174a153bbdc5ad22">Verwendung von OptParse</a> </div> <div style="margin-top: 10px;"> <a href="/de/d7bb0672a2751a95df80">Verwendung von return</a> </div> <div style="margin-top: 10px;"> <a href="/de/d91095639578d3ff3ca4">So installieren Sie Prover9</a> </div> <div style="margin-top: 10px;"> <a href="/de/dfe10bfcfdd1c61b7a78">So bedienen Sie NumPy</a> </div> <div style="margin-top: 10px;"> <a href="/de/eb39bca9762043601675"></a> </div> <div style="margin-top: 10px;"> <a href="/de/f66629335424868f3f85">Wie man Imutils benutzt</a> </div> <div style="margin-top: 10px;"> <a href="/de/2c341c5c8b6be6df06f6">So kratzen Sie Bilddaten von Flickr mit Python</a> </div> <div style="margin-top: 10px;"> <a href="/de/434b259e473cc8646e91">Wie man Pferderenndaten mit pandas read_html kratzt</a> </div> <div style="margin-top: 10px;"> <a href="/de/c881f7d9ef5add132c7b">Scraping mit Python-Selen ist alt! ?? ・ ・ ・ Verwendung von Pyppeteer</a> </div> <div style="margin-top: 10px;"> <a href="/de/0dc321690e00e7ae322b">[Neueste Version 2020.8] So installieren Sie Python</a> </div> <div style="margin-top: 10px;"> <a href="/de/13cf2e1dc73b96508314">Verwendung von Qt Designer</a> </div> <div style="margin-top: 10px;"> <a href="/de/1429b7529d858ee4177b">[IPython] Freigeben eines IPython-Notizbuchs</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>