{"id":893,"date":"2015-03-23T22:13:29","date_gmt":"2015-03-23T20:13:29","guid":{"rendered":"https:\/\/0x0a.li\/?p=893"},"modified":"2023-04-04T12:39:05","modified_gmt":"2023-04-04T10:39:05","slug":"how-to-i-webscraping-mit-kimono","status":"publish","type":"post","link":"https:\/\/0x0a.li\/de\/how-to-i-webscraping-mit-kimono\/","title":{"rendered":"How to: Webscraping mit Kimono"},"content":{"rendered":"<p><\/p>\n<div class=\"teaser-text\">\n<p>Bei 0x0a entstehen viele Texte, die als\u00a0Ausgangsmaterial gro\u00dfe Textdatens\u00e4tze, sogenannte Korpora, verwenden. Ein Korpus kann mit der Methode des\u00a0\u201e<a href=\"http:\/\/en.wikipedia.org\/wiki\/Web_scraping\" target=\"_blank\" rel=\"noopener\">Webscraping<\/a>\u201c auf einfachen Weg selbst erstellt\u00a0werden. F\u00fcr <a title=\"Chicken Infinite\" href=\"https:\/\/0x0a.li\/text\/chicken-infinite\/\" target=\"_blank\" rel=\"noopener\">Chicken Infinite<\/a> \u2013 eine Kochanleitung auf 532 Seiten \u2013\u00a0wurde ein\u00a0Textkorpus aus\u00a0Kochrezepten aus dem Internet\u00a0zusammengetragen. Benutzt wurde hierbei\u00a0der Webscraper Kimono, den ich heute vorstelle.<\/p>\n<\/div>\n<p>Kimono von <a href=\"https:\/\/www.kimonolabs.com\/\" target=\"_blank\" rel=\"noopener\">kimonolabs<\/a> bietet eine benutzerfreundliche M\u00f6glichkeit,\u00a0Webseiteninhalte strukturiert abzugreifen. So lassen sich ohne\u00a0Programmierkenntnisse gro\u00dfe Textsammlungen anlegen.\u00a0Besonders sinnvoll erscheint dieser Service\u00a0auch, wenn Webseiten keine API\u00a0(dt. Programmierschnittstelle) anbieten, um Daten auf komfortablen Weg zu\u00a0\u00fcbertragen. Man baut sich einfach seine eigene API und erh\u00e4lt als Output eine\u00a0JSON-, RSS- oder CSV-Datei mit dem gew\u00fcnschten Text der Website.<\/p>\n<p><!--more--><\/p>\n<h3>Bookmarklet\u00a0oder\u00a0Chrome Plugin<\/h3>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignleft wp-image-906\" style=\"margin: 0.5em 0.9em .2em 0;\" src=\"https:\/\/0x0a.li\/wp-content\/uploads\/2015\/03\/kimono_logo-150x150.png\" alt=\"\" width=\"100\" height=\"100\" srcset=\"https:\/\/0x0a.li\/wp-content\/uploads\/2015\/03\/kimono_logo-150x150.png 150w, https:\/\/0x0a.li\/wp-content\/uploads\/2015\/03\/kimono_logo.png 256w\" sizes=\"(max-width: 100px) 100vw, 100px\" \/>Um Kimono nutzen zu k\u00f6nnen, braucht es einen Login. Au\u00dferdem\u00a0m\u00fcssen wir ein\u00a0<a href=\"https:\/\/www.kimonolabs.com\/learn\/getstarted\" target=\"_blank\" rel=\"noopener\">Bookmarklet<\/a> in\u00a0unserem Browser einrichten oder das hauseigene\u00a0<a href=\"https:\/\/help.kimonolabs.com\/hc\/en-us\/articles\/203339070-Install-the-kimono-chrome-extension\" target=\"_blank\" rel=\"noopener\">Google Chrome Plugin<\/a>\u00a0von Kimono installieren. Nach dem Klick auf das Bookmarklet oder den Plugin-Button gelangt man\u00a0auf eine zwischengespeicherte Version der Webseite,\u00a0auf die sich das Kimono-Interface legt.<\/p>\n<h3>Linkliste erstellen<\/h3>\n<p>Alle Elemente, die der Webscraper speichern kann, sind auf der Webseite nun anklickbar. W\u00e4hlt man ein\u00a0Kochrezept in einer Liste von Rezepten\u00a0aus, erkennt Kimono alle anderen\u00a0Rezept-Links in der Spalte\u00a0und fragt, ob diese in die Auswahl \u00fcbernommen werden sollen.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-928 size-full\" src=\"https:\/\/0x0a.li\/wp-content\/uploads\/2015\/03\/kimono_11.png\" alt=\"\" width=\"700\" height=\"394\" srcset=\"https:\/\/0x0a.li\/wp-content\/uploads\/2015\/03\/kimono_11.png 700w, https:\/\/0x0a.li\/wp-content\/uploads\/2015\/03\/kimono_11-300x169.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/>Anschlie\u00dfend gibt man\u00a0dem Datenfeld (Kimono nennt es <em>Properties<\/em>) einen Namen: <em>Rezept-Link<\/em>. Kimono speichert hierbei automatisch nicht nur den Namen des Kochrezepts\u00a0\u2013 also den Text im HTML-Block A\u00a0\u2013\u00a0sondern auch die Link-URL\u00a0\u2013\u00a0also die Webadresse zum Kochrezept selber\u00a0im \u201esrc\u201c-Attribut des A-Blocks.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-932 size-full\" src=\"https:\/\/0x0a.li\/wp-content\/uploads\/2015\/03\/kimono_2.png\" alt=\"\" width=\"700\" height=\"219\" srcset=\"https:\/\/0x0a.li\/wp-content\/uploads\/2015\/03\/kimono_2.png 700w, https:\/\/0x0a.li\/wp-content\/uploads\/2015\/03\/kimono_2-300x94.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/p>\n<p>Dieser Schritt ist beliebig oft wiederholbar. So\u00a0k\u00f6nnen wir nicht nur den Verweis zu einem Kochrezept speichern, sondern\u00a0beispielsweise auch das jeweilige Bild zum\u00a0Kochrezept, sofern es in die\u00a0selbe HTML-Struktur eingebettet ist. Doch zun\u00e4chst lassen wir nur eine Liste mit Links zu Kochrezepten zusammenstellen.<\/p>\n<h3>Pagination<\/h3>\n<p>Hat man ausgew\u00e4hlt, welche Elemente auf einer Webseite gespeichert werden sollen, bietet Kimono uns im\u00a0n\u00e4chsten Schritt ein Feature an, das den Scraper die <em>Pagination<\/em> oder Bl\u00e4tterfunktion von\u00a0Webseiten bedienen l\u00e4sst. Wir w\u00e4hlen das <em>Buch-Icon<\/em> aus und klicken auf unserer Webseite auf\u00a0den Link, mit Hilfe dessen wir zur n\u00e4chsten Seite gelangen (\u201eWeiter\u201c, \u201eN\u00e4chste Seite\u201c etc.). Wei\u00df Kimono, <em>wie<\/em> man auf die n\u00e4chste Seite gelangt, bahnt\u00a0es\u00a0sich einen Weg durch die Rezept-Community sp\u00e4ter von allein und kann so beliebig viele Seiten scrapen.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-930 size-full\" src=\"https:\/\/0x0a.li\/wp-content\/uploads\/2015\/03\/kimono_31.png\" alt=\"\" width=\"700\" height=\"428\" srcset=\"https:\/\/0x0a.li\/wp-content\/uploads\/2015\/03\/kimono_31.png 700w, https:\/\/0x0a.li\/wp-content\/uploads\/2015\/03\/kimono_31-300x183.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/p>\n<p>Auch mit sogenannten\u00a0<em>infinite scroll<\/em>-Systemen, bei denen neuer Seiteninhalt\u00a0mittels Javascript unterhalb\u00a0der selben Webseite nachgeladen wird (z.B. wie bei Tumblr), kann Kimono umgehen.<br \/>\nUm an gro\u00dfe Datens\u00e4tze zu gelangen, erweist sich die Bl\u00e4tterfunktion von Kimono als hilfreich.<\/p>\n<h3>Scrapen nach Login<\/h3>\n<p>Sollte ein Login f\u00fcr den Einsatz des Webscrapers erforderlich sein, h\u00e4ndelt Kimono dies f\u00fcr uns im <em>Auth mode<\/em>. Hierzu\u00a0muss das\u00a0Chrome Plugin f\u00fcr den <em>Inkognito-Modus zugelassen sein<\/em>.<\/p>\n<h3>API speichern<\/h3>\n<p>Zum Abschluss schalten wir in einen zweiten Bildschirm, der uns den\u00a0Webscraper im Detail konfigurieren l\u00e4sst. Pro-Tipp: Hier kann\u00a0der\u00a0CSS-Pfad\u00a0oder\u00a0Regular Expressions-String f\u00fcr jedes zu speichernde Feld noch einmal angepasst\u00a0werden (um etwa komplexere Datenstrukturen abzugreifen). In den meisten F\u00e4llen k\u00f6nnen diese Felder aber unver\u00e4ndert bleiben.\u00a0Am Ende liefert Kimono uns eine Vorschau\u00a0des Outputs\u00a0im JSON-, CSV- oder RSS-Format. Nach dem Klick auf <em>Done<\/em> gibt man der API einen Namen und w\u00e4hlt ein\u00a0Zeitintervall f\u00fcr das S<em>crapen<\/em> aus. Wir nennen unsere API <em>Rezepte<\/em>.<\/p>\n<h3>APIs kombinieren<\/h3>\n<p>Kimono kann APIs miteinander kombinieren. So\u00a0haben wir im ersten Schritt eine API erstellt, die Rezept-Links sammelt. Im zweiten Schritt\u00a0erstellen wir eine weitere API, die\u00a0jeden einzelnen Rezept-Link aufl\u00f6st, die entsprechende Webseite scannt\u00a0und das Kochrezept\u00a0herunterl\u00e4dt. Hierzu m\u00fcssen wir Kimono wieder mitteilen, welche Felder gespeichert werden sollen.\u00a0Wir surfen auf eine beliebige Rezeptseite, auf der eine\u00a0<em>Kochanweisung<\/em> und eine\u00a0<em>Zutatenliste<\/em>\u00a0zu lesen\u00a0sind\u00a0und merken uns\u00a0diese Felder f\u00fcrs Speichern vor. Wir nennen unsere zweite API <em>Rezept-Details<\/em>.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-948\" src=\"https:\/\/0x0a.li\/wp-content\/uploads\/2015\/03\/kimono_4.png\" alt=\"\" width=\"700\" height=\"285\" srcset=\"https:\/\/0x0a.li\/wp-content\/uploads\/2015\/03\/kimono_4.png 700w, https:\/\/0x0a.li\/wp-content\/uploads\/2015\/03\/kimono_4-300x122.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/p>\n<p>Nachdem wir unsere zweite API erstellt haben, kombinieren\u00a0wir sie mit der Ersten.\u00a0Hierzu\u00a0rufen wir im Login-Bereich von Kimono\u00a0die Seite <em>My APIs<\/em> auf, die uns eine \u00dcbersicht unserer APIs liefert. Wir w\u00e4hlen die zuletzt\u00a0erstellte API (<em>Rezept-Details<\/em>) aus und legen unter <em>Crawl Setup<\/em>, im Feld <em>Source API<\/em>\u00a0unsere erste API (<em>Rezepte<\/em>) fest. Klickt man auf <em>Start Crawl<\/em>, beginnt Kimono alle Rezept-Texte, die wir mit unserer ersten API indiziert haben,\u00a0herunterzuladen. Unter dem Reiter <em>Data preview<\/em>\u00a0erhalten wir wieder eine Vorschau auf unsere gesammelten Daten im CSV-, RSS- oder JSON-Format.<\/p>\n<p>Am Ende haben wir ein Korpus aus Tausenden von Kochrezepten. Mit dieser Textsammlung k\u00f6nnen wir nun weiterarbeiten, sie sortieren, rearrangieren, nach Regeln parsen oder transformieren \u2013 etwa mit einem Python-Script oder durch eine Konkordanzsoftware. Wie man das macht, beschreiben wir ein andermal.<\/p>\n<div class=\"distribute-box\">\n<div class=\"cover\"><img decoding=\"async\" src=\"https:\/\/0x0a.li\/wp-content\/uploads\/2014\/10\/cover_chicken_infinite.png\" alt=\"\" \/><\/div>\n<div class=\"details\">\n<ul>\n<li class=\"title\">Chicken Infinite<\/li>\n<li>Gregor Weichbrodt<\/li>\n<li>2014<\/li>\n<li>654101 Zeichen<\/li>\n<li class=\"download\"><strong>Download:<\/strong> <a href=\"https:\/\/0x0a.li\/wp-content\/uploads\/2014\/10\/Chicken_Infinite_0x0a.pdf\" target=\"_blank\" rel=\"noopener\">pdf<\/a><\/li>\n<\/ul>\n<\/div>\n<\/div>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Bei 0x0a entstehen viele Texte, die als\u00a0Ausgangsmaterial gro\u00dfe Textdatens\u00e4tze, sogenannte Korpora, verwenden. Ein Korpus kann mit der Methode des\u00a0\u201eWebscraping\u201c auf einfachen Weg selbst erstellt\u00a0werden. F\u00fcr Chicken Infinite \u2013 eine Kochanleitung auf 532 Seiten \u2013\u00a0wurde ein\u00a0Textkorpus aus\u00a0Kochrezepten aus dem Internet\u00a0zusammengetragen. Benutzt wurde hierbei\u00a0der Webscraper Kimono, den ich heute vorstelle. Kimono von kimonolabs bietet eine benutzerfreundliche M\u00f6glichkeit,\u00a0Webseiteninhalte [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[75],"tags":[],"acf":[],"_links":{"self":[{"href":"https:\/\/0x0a.li\/de\/wp-json\/wp\/v2\/posts\/893"}],"collection":[{"href":"https:\/\/0x0a.li\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/0x0a.li\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/0x0a.li\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/0x0a.li\/de\/wp-json\/wp\/v2\/comments?post=893"}],"version-history":[{"count":88,"href":"https:\/\/0x0a.li\/de\/wp-json\/wp\/v2\/posts\/893\/revisions"}],"predecessor-version":[{"id":1686,"href":"https:\/\/0x0a.li\/de\/wp-json\/wp\/v2\/posts\/893\/revisions\/1686"}],"wp:attachment":[{"href":"https:\/\/0x0a.li\/de\/wp-json\/wp\/v2\/media?parent=893"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/0x0a.li\/de\/wp-json\/wp\/v2\/categories?post=893"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/0x0a.li\/de\/wp-json\/wp\/v2\/tags?post=893"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}