So erstellen Sie einen einfachen Web-Crawler, um Informationen von einer Website abzurufen

So erstellen Sie einen einfachen Web-Crawler, um Informationen von einer Website abzurufen

Programme, die Informationen von Websites lesen, oder Webcrawler, verfügen über alle möglichen nützlichen Anwendungen. Sie können nach Aktieninformationen, Sportergebnissen, Text von einem Twitter-Konto suchen oder Preise von Einkaufswebsites abrufen.





Das Schreiben dieser Web-Crawling-Programme ist einfacher, als Sie vielleicht denken. Python verfügt über eine großartige Bibliothek zum Schreiben von Skripten, die Informationen von Websites extrahieren. Sehen wir uns an, wie Sie mit Scrapy einen Webcrawler erstellen.





Scrapy installieren

kratzig ist eine Python-Bibliothek, die erstellt wurde, um das Web zu durchsuchen und Webcrawler zu erstellen. Es ist schnell, einfach und kann ohne großen Aufwand durch mehrere Webseiten navigieren.





Scrapy ist über die Pip Installs Python (PIP)-Bibliothek verfügbar, hier ist eine Auffrischung auf So installieren Sie PIP unter Windows, Mac und Linux .

Die Verwendung einer virtuellen Python-Umgebung wird bevorzugt, da Sie Scrapy in einem virtuellen Verzeichnis installieren können, das Ihre Systemdateien in Ruhe lässt. In der Dokumentation von Scrapy wird empfohlen, dies zu tun, um die besten Ergebnisse zu erzielen.



Erstellen Sie ein Verzeichnis und initialisieren Sie eine virtuelle Umgebung.

So drehen Sie eine Tabelle in Word
mkdir crawler
cd crawler
virtualenv venv
. venv/bin/activate

Sie können Scrapy jetzt mit einem PIP-Befehl in dieses Verzeichnis installieren.





pip install scrapy

Ein kurzer Check, um sicherzustellen, dass Scrapy richtig installiert ist

scrapy
# prints
Scrapy 1.4.0 - no active project
Usage:
scrapy [options] [args]
Available commands:
bench Run quick benchmark test
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
...

So erstellen Sie einen Web-Crawler

Nachdem die Umgebung nun bereit ist, können Sie mit der Erstellung des Web-Crawlers beginnen. Lassen Sie uns einige Informationen aus einer Wikipedia-Seite zu Batterien herauskratzen: https://en.wikipedia.org/wiki/Battery_(Strom) .





Der erste Schritt zum Schreiben eines Crawlers besteht darin, eine Python-Klasse zu definieren, die sich von Scrapy.Spider . Damit haben Sie Zugriff auf alle Funktionen und Features von Scrapy. Nennen wir diese Klasse Spinne1 .

Eine Spinnenklasse benötigt ein paar Informationen:

  • zu Name zur Identifizierung der Spinne
  • zu start_urls Variable, die eine Liste von URLs enthält, von denen gecrawlt werden soll (die Wikipedia-URL ist das Beispiel in diesem Tutorial)
  • zu analysieren() Methode, die verwendet wird, um die Webseite zu verarbeiten, um Informationen zu extrahieren
import scrapy
class spider1(scrapy.Spider):
name = 'Wikipedia'
start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)']
def parse(self, response):
pass

Ein kurzer Test, um sicherzustellen, dass alles richtig läuft.

scrapy runspider spider1.py
# prints
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapybot)
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Overridden settings: {'SPIDER_LOADER_WARN_ONLY': True}
2017-11-23 09:09:21 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.memusage.MemoryUsage',
'scrapy.extensions.logstats.LogStats',
...

Logging deaktivieren

Wenn Sie Scrapy mit dieser Klasse ausführen, werden Protokollinformationen ausgegeben, die Ihnen im Moment nicht weiterhelfen. Machen wir es uns einfach, indem wir diese überschüssigen Protokollinformationen entfernen. Benutze einen Warnung -Anweisung durch Hinzufügen von Code am Anfang der Datei.

import logging
logging.getLogger('scrapy').setLevel(logging.WARNING)

Wenn Sie das Skript jetzt erneut ausführen, werden die Protokollinformationen nicht gedruckt.

Verwenden des Chrome-Inspektors

Alles auf einer Webseite wird in HTML-Elementen gespeichert. Die Elemente sind im Document Object Model (DOM) angeordnet. Das Verständnis des DOM ist entscheidend, um das Beste aus Ihrem Webcrawler herauszuholen. Ein Webcrawler durchsucht alle HTML-Elemente auf einer Seite, um Informationen zu finden. Daher ist es wichtig zu wissen, wie sie angeordnet sind.

Google Chrome verfügt über Tools, mit denen Sie HTML-Elemente schneller finden. Sie können den HTML-Code für jedes Element finden, das Sie auf der Webseite sehen, indem Sie den Inspektor verwenden.

  • Navigieren Sie zu einer Seite in Chrome
  • Platzieren Sie die Maus auf dem Element, das Sie anzeigen möchten
  • Klicken Sie mit der rechten Maustaste und wählen Sie Prüfen aus der Speisekarte

Diese Schritte öffnen die Entwicklerkonsole mit dem Elemente Registerkarte ausgewählt. Unten in der Konsole sehen Sie eine Baumstruktur mit Elementen. In diesem Baum erhalten Sie Informationen für Ihr Skript.

Extrahieren des Titels

Lassen Sie uns das Skript dazu bringen, etwas Arbeit für uns zu erledigen; Ein einfacher Crawl, um den Titeltext der Webseite abzurufen.

Starten Sie das Skript, indem Sie dem Code hinzufügen analysieren() Methode, die den Titel extrahiert.

...
def parse(self, response):
print response.css('h1#firstHeading::text').extract()
...

Die Antwort Argument unterstützt eine Methode namens CSS() die Elemente von der Seite unter Verwendung des von Ihnen angegebenen Speicherorts auswählt.

In diesem Beispiel ist das Element h1.firstHeading . Hinzufügen

::text

zum Skript gibt Ihnen den Textinhalt des Elements. Endlich, das Extrakt() Methode gibt das ausgewählte Element zurück.

Wenn Sie dieses Skript in Scrapy ausführen, wird der Titel in Textform gedruckt.

[u'Battery (electricity)']

Die Beschreibung finden

Nachdem wir nun den Titeltext abgekratzt haben, machen wir mehr mit dem Skript. Der Crawler sucht den ersten Absatz nach dem Titel und extrahiert diese Informationen.

Hier ist die Elementstruktur in der Chrome-Entwicklerkonsole:

wie man dasselbe Programm zweimal gleichzeitig ausführt
div#mw-content-text>div>p

Der rechte Pfeil (>) zeigt eine Eltern-Kind-Beziehung zwischen den Elementen an.

Dieser Speicherort gibt alle . zurück P Elemente übereinstimmen, die die gesamte Beschreibung enthält. Um den ersten zu bekommen P Element können Sie diesen Code schreiben:

response.css('div#mw-content-text>div>p')[0]

Genau wie der Titel fügen Sie einen CSS-Extraktor hinzu

::text

um den Textinhalt des Elements zu erhalten.

response.css('div#mw-content-text>div>p')[0].css('::text')

Der letzte Ausdruck verwendet Extrakt() um die Liste zurückzugeben. Sie können Python verwenden beitreten() -Funktion, um der Liste beizutreten, sobald das Crawling abgeschlossen ist.

def parse(self, response):
print ''.join(response.css('div#mw-content-text>div>p')[0].css('::text').extract())

Das Ergebnis ist der erste Absatz des Textes!

An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is
...

Sammeln von JSON-Daten

Scrapy kann Informationen in Textform extrahieren, was nützlich ist. Mit Scrapy können Sie auch die Daten JavaScript Object Notation (JSON) anzeigen. JSON ist eine übersichtliche Methode zum Organisieren von Informationen und wird häufig in der Webentwicklung verwendet. JSON funktioniert ziemlich gut mit Python sowie.

Wenn Sie Daten als JSON sammeln müssen, können Sie die Ertrag -Anweisung in Scrapy integriert.

Hier ist eine neue Version des Skripts mit einer yield-Anweisung. Anstatt das erste p-Element im Textformat zu erhalten, werden alle p-Elemente erfasst und im JSON-Format organisiert.

was ist virtueller speicher windows 10
...
def parse(self, response):
for e in response.css('div#mw-content-text>div>p'):
yield { 'para' : ''.join(e.css('::text').extract()).strip() }
...

Sie können den Spider jetzt ausführen, indem Sie eine JSON-Ausgabedatei angeben:

scrapy runspider spider3.py -o joe.json

Das Skript druckt nun alle p-Elemente.

[
{'para': 'An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is the cathode and its negative terminal is the anode.[2] The terminal marked negative is the source of electrons that when connected to an external circuit will flow and deliver energy to an external device. When a battery is connected to an external circuit, electrolytes are able to move as ions within, allowing the chemical reactions to be completed at the separate terminals and so deliver energy to the external circuit. It is the movement of those ions within the battery which allows current to flow out of the battery to perform work.[3] Historically the term 'battery' specifically referred to a device composed of multiple cells, however the usage has evolved additionally to include devices composed of a single cell.[4]'},
{'para': 'Primary (single-use or 'disposable') batteries are used once and discarded; the electrode materials are irreversibly changed during discharge. Common examples are the alkaline battery used for flashlights and a multitude of portable electronic devices. Secondary (rechargeable) batteries can be discharged and recharged multiple
...

Mehrere Elemente abkratzen

Bisher hat der Webcrawler den Titel und eine Art Element von der Seite gekratzt. Scrapy kann auch Informationen aus verschiedenen Arten von Elementen in einem Skript extrahieren.

Lassen Sie uns die besten IMDb Box Office-Hits für ein Wochenende extrahieren. Diese Informationen stammen aus http://www.imdb.com/chart/boxoffice , in einer Tabelle mit Zeilen für jede Metrik.

Die analysieren() -Methode kann mehr als ein Feld aus der Zeile extrahieren. Mit den Chrome-Entwicklertools können Sie die in der Tabelle verschachtelten Elemente finden.

...
def parse(self, response):
for e in response.css('div#boxoffice>table>tbody>tr'):
yield {
'title': ''.join(e.css('td.titleColumn>a::text').extract()).strip(),
'weekend': ''.join(e.css('td.ratingColumn')[0].css('::text').extract()).strip(),
'gross': ''.join(e.css('td.ratingColumn')[1].css('span.secondaryInfo::text').extract()).strip(),
'weeks': ''.join(e.css('td.weeksColumn::text').extract()).strip(),
'image': e.css('td.posterColumn img::attr(src)').extract_first(),
}
...

Die Bild Selektor gibt an, dass img ist ein Nachkomme von td.posterColumn . Um das richtige Attribut zu extrahieren, verwenden Sie den Ausdruck |_+_|.

Das Ausführen der Spinne gibt JSON zurück:

::attr(src)

Mehr Web-Scraper und Bots

Scrapy ist eine detaillierte Bibliothek, die fast jede Art von Web-Crawling durchführen kann, die Sie anfordern. Wenn es darum geht, Informationen in HTML-Elementen zu finden, kombiniert mit der Unterstützung von Python, ist es kaum zu schlagen. Egal, ob Sie einen Webcrawler erstellen oder sich mit den Grundlagen des Web-Scrapings vertraut machen, die einzige Grenze besteht darin, wie viel Sie zu lernen bereit sind.

Wenn Sie nach weiteren Möglichkeiten suchen, Crawler oder Bots zu erstellen, können Sie es versuchen Twitter- und Instagram-Bots mit Python erstellen . Python kann einige erstaunliche Dinge in der Webentwicklung aufbauen, daher lohnt es sich, bei der Erforschung dieser Sprache über Webcrawler hinauszugehen.

Teilen Teilen Tweet Email 15 Windows-Eingabeaufforderungsbefehle (CMD), die Sie kennen müssen

Die Eingabeaufforderung ist immer noch ein leistungsstarkes Windows-Tool. Hier sind die nützlichsten CMD-Befehle, die jeder Windows-Benutzer kennen muss.

Weiter lesen
Verwandte Themen
  • Programmierung
  • Webmaster werkzeuge
  • Programmierung
  • Python
  • Codierungs-Tutorials
  • Web-Crawler
Über den Autor Anthony Grant(40 veröffentlichte Artikel)

Anthony Grant ist ein freiberuflicher Autor für Programmierung und Software. Er ist ein Informatik-Major und beschäftigt sich mit Programmierung, Excel, Software und Technologie.

Mehr von Anthony Grant

Abonniere unseren Newsletter

Abonnieren Sie unseren Newsletter für technische Tipps, Rezensionen, kostenlose E-Books und exklusive Angebote!

Klicken Sie hier, um zu abonnieren