Heim  >  Artikel  >  Backend-Entwicklung  >  Scrapy ist eine Daten-Scraping-Anwendung, die Crawler-Vorlagen enthält

Scrapy ist eine Daten-Scraping-Anwendung, die Crawler-Vorlagen enthält

WBOY
WBOYOriginal
2023-06-22 09:24:06799Durchsuche

Mit der kontinuierlichen Weiterentwicklung der Internet-Technologie ist auch die Crawler-Technologie weit verbreitet. Die Crawler-Technologie kann Daten im Internet automatisch crawlen und in einer Datenbank speichern, was die Datenanalyse und das Data Mining erleichtert. Als sehr bekanntes Crawler-Framework in Python verfügt Scrapy über einige gängige Crawler-Vorlagen, mit denen Daten auf der Zielwebsite schnell gecrawlt und automatisch in einer lokalen oder Cloud-Datenbank gespeichert werden können. In diesem Artikel wird erläutert, wie Sie Scrapys eigene Crawler-Vorlage zum Crawlen von Daten verwenden und wie Sie Daten während des Crawling-Vorgangs bereinigen, analysieren und speichern.

1. Einführung in Scrapy-Crawler-Vorlagen

Scrapy enthält einige Crawler-Vorlagen, darunter grundlegende Spider-Vorlagen, CrawlSpider-Vorlagen und XmlFeedSpider-Vorlagen. Die Spider-Vorlage ist die einfachste Crawler-Vorlage. Ihr Vorteil besteht darin, dass sie ein breites Anwendungsspektrum bietet und einfach zu verwenden ist. Die CrawlSpider-Vorlage ist eine regelbasierte Crawler-Vorlage, die mehrstufige Links schnell crawlen kann und benutzerdefinierte Regeln unterstützt. Die XmlFeedSpider-Vorlage ist eine Crawler-Vorlage, die für das XML-Format geeignet ist. Die Verwendung dieser Vorlagen für das Daten-Crawling kann die Entwicklungsschwierigkeiten für Programmierer erheblich reduzieren und die Crawling-Effizienz verbessern.

2. Scrapy-Crawler-Vorlagenanwendung

Das Folgende ist ein praktisches Beispiel, um zu veranschaulichen, wie man Scrapys eigene Spider-Vorlage zum Crawlen von Daten verwendet. Die Zielwebsite, die wir crawlen werden, ist eine Website mit Filminformationen, und die neuesten Filminformationen werden auf der Homepage der Website aufgeführt. Wir müssen den Namen, den Regisseur, die Schauspieler, die Bewertungen und andere Informationen des Films von dieser Website crawlen und in einer lokalen Datenbank speichern.

  1. Erstellen Sie ein Scrapy-Projekt

Zuerst müssen Sie das Befehlszeilenfenster öffnen, zum Zielarbeitsverzeichnis wechseln und dann den folgenden Befehl eingeben:

scrapy startproject movies

Dieser Befehl erstellt ein Scrapy-Projekt mit dem Namen movies Projektverzeichnis, Enthält ein Unterverzeichnis namens Spiders, das zum Platzieren von Crawler-Programmen verwendet wird.

  1. Erstellen Sie eine Spider-Vorlage

Verwenden Sie im Projektverzeichnis den folgenden Befehl, um einen Spider mit dem Namen movie_spider zu erstellen:

scrapy genspider movie_spider www.movies.com

Dieser Befehl generiert automatisch ein Programm basierend auf der Spider-Vorlage, wobei www.movies.com das darstellt Ziel Der Domänenname der Website. Im Spiders-Verzeichnis erscheint eine Datei namens movie_spider.py mit folgendem Inhalt:

import scrapy

class MovieSpider(scrapy.Spider):
    name = 'movie_spider'
    allowed_domains = ['www.movies.com']
    start_urls = ['http://www.movies.com/']

    def parse(self, response):
        pass

Dies ist das einfachste Spider-Programm. Dabei stellt Name den Namen des Crawlers dar, erlaubte_Domänen stellt die Liste der Domänennamen dar, die gecrawlt werden dürfen, und start_urls stellt die Liste der URLs dar, die mit dem Crawlen beginnen. Bei der Parse-Methode müssen wir Code für das Parsen und Erfassen von Daten schreiben.

  1. Datenerfassung und -analyse

Wir müssen Code schreiben, um die Daten der Zielwebsite aus dem Antwortobjekt zu erfassen und zu analysieren. Für die gerade erwähnte Website mit Filminformationen können wir XPath- oder CSS-Selektoren verwenden, um Elemente auf der Seite zu finden. Unter der Annahme, dass der Filmname in einem div-Element mit der Klasse movie-name auf der Seite gespeichert ist, können wir den folgenden Code verwenden, um alle Filmnamen zu extrahieren:

def parse(self, response):
    movies = response.xpath('//div[@class="movie-name"]/text()').extract()
    for movie in movies:
        yield {'name': movie}

Hier verwenden wir die XPath-Syntax, um alle Klassen movie-name von zu finden das div-Element und verwenden Sie die Extract-Methode, um den Textinhalt im Element zu extrahieren. Als nächstes verwenden wir eine for-Schleife, um jeden Filmnamen als Ausgabe des Generators zu erhalten.

Ähnlich können wir über XPath- oder CSS-Selektoren andere Elemente finden, die uns interessieren. Informationen zum Regisseur und Schauspieler können beispielsweise in einem div-Element mit der Klasse „director“ gespeichert werden, und Bewertungsinformationen können in einem div-Element mit der Klasse „rate“ gespeichert werden.

  1. Datenspeicherung

Im Spider-Programm müssen wir Code schreiben, um die erfassten Daten in einer lokalen oder Cloud-Datenbank zu speichern. Scrapy unterstützt das Speichern von Daten in einer Vielzahl unterschiedlicher Datenbanken, darunter MySQL, PostgreSQL, MongoDB usw.

Zum Beispiel können wir die MySQL-Datenbank verwenden, um Filminformationen zu speichern. Im Spiders-Verzeichnis können wir eine Datei namens mysql_pipeline.py erstellen, die den folgenden Code enthält:

import pymysql

class MysqlPipeline(object):
    def __init__(self):
        self.conn = pymysql.connect(host='localhost', user='root', passwd='123456', db='movie_db', charset='utf8')

    def process_item(self, item, spider):
        cursor = self.conn.cursor()
        sql = "INSERT INTO movie(name, director, actors, rate) VALUES(%s, %s, %s, %s)"
        cursor.execute(sql, (item['name'], item['director'], item['actors'], item['rate']))
        self.conn.commit()

    def __del__(self):
        self.conn.close()

Dieses Programm speichert die Implementierungsdaten in der MySQL-Datenbank, wobei movie_db der Datenbankname ist und die Filmtabelle den Namen enthält , Regisseur, Vier Felder, Schauspieler und Rate, werden zum Speichern von Filmnamen, Regisseur, Schauspielern und Bewertungsinformationen verwendet. Die Methode „process_item“ wird verwendet, um die im Spider-Programm generierten Elemente in der Datenbank zu speichern.

Um die Datei „mysql_pipeline.py“ verwenden zu können, müssen wir außerdem die folgende Konfiguration in der Datei „settings.py“ hinzufügen:

ITEM_PIPELINES = {
    'movies.spiders.mysql_pipeline.MysqlPipeline': 300
}

Hier gibt „movies.spiders.mysql_pipeline.MysqlPipeline“ den Speicherort und den Klassennamen der mysql_pipeline an .py-Datei. Die Zahl 300 gibt die Priorität der Datenverarbeitung an. Je kleiner die Zahl, desto höher die Priorität.

  1. Führen Sie das Scrapy-Programm aus

Führen Sie im Spiders-Verzeichnis den folgenden Befehl aus, um das Scrapy-Programm auszuführen:

scrapy crawl movie_spider

Dieser Befehl startet das Crawler-Programm namens movie_spider, um mit dem Crawlen der Daten der Zielwebsite und deren Speicherung zu beginnen MySQL-Datenbank.

3. Zusammenfassung

In diesem Artikel wird erläutert, wie Sie Scrapys eigene Crawler-Vorlagen zum Crawlen von Daten verwenden, einschließlich der Spider-Vorlage, der CrawlSpider-Vorlage und der XmlFeedSpider-Vorlage. Anhand eines praktischen Beispiels veranschaulichen wir, wie Spider-Vorlagen zum Erfassen und Analysieren von Daten sowie zum Speichern der Ergebnisse in einer MySQL-Datenbank verwendet werden. Die Verwendung von Scrapy zur Datenerfassung kann die Effizienz und Qualität der Datenerfassung erheblich verbessern und eine starke Unterstützung für nachfolgende Datenanalyse, Data Mining und andere Arbeiten bieten.

Das obige ist der detaillierte Inhalt vonScrapy ist eine Daten-Scraping-Anwendung, die Crawler-Vorlagen enthält. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn