[PYTHON] Ich habe versucht, mit Scrapy Daten von einer Website zu sammeln

Ich habe ein paar grundlegende Crawls und Scraping mit Scrapy gemacht.

Was ich gemacht habe

Scrapy-Projekt, um den Titel und die Gesamtpunktzahl der Winteranimation 2016 von der folgenden Website mit einer Zusammenfassung der Animationsinformationen abzurufen https://www.anikore.jp/chronicle/2016/winter/

Erstellungsverfahren

Projekterstellung

https://doc.scrapy.org/en/1.2/intro/tutorial.html Wie Sie in diesem Original-Tutorial sehen können

% scrapy startproject project_name

Das Projekt wird erstellt, indem der Befehl an einer beliebigen Stelle ausgeführt wird. Dieses Mal habe ich "Projektname" in "Anime" geändert.

Spinnenkreation

Erstellen Sie als Nächstes eine Python-Datei, die die Spinne sein wird, im Verzeichnis "Spinnen" des Projekts. Dieses Mal habe ich es "anime_spider.py" genannt.

Das fertige Produkt sieht folgendermaßen aus:

anime_spider.py


import scrapy


class AnimeSpider(scrapy.Spider):
    name = "anime"
    start_urls = [
        'https://www.anikore.jp/chronicle/2016/winter/'
    ]

    def parse(self, response):
        for anime in response.css('div.animeSearchResultBody'):
            yield {
                'title': anime.css('span.animeTitle a::text').extract_first(),
                'score': anime.css('span.totalRank::text').extract_first()
            }

        next_page = response.css('a.next::attr(href)').extract_first()
        if next_page is not None:
            next_page = response.urljoin(next_page)
            yield scrapy.Request(next_page, callback=self.parse)

Spinnenname

name = "anime"

Dies ist der Name von Spider. Verwenden Sie beim Scraping den hier deklarierten Namen wie folgt.

% scrapy crawl anime

Crawling-Startpunkt-URL

start_urls = [
    'https://www.anikore.jp/chronicle/2016/winter/'
]

Dies ist die URL, die als Ausgangspunkt für das Crawlen dient. Dieses Mal möchte ich eine Liste der Winteranimationen 2016 erhalten, daher erkläre ich sie oben in der Winteranimation 2016.

Schaben

Das Scraping und Crawlen erfolgt in einer Funktion namens parse (). Unten ist der Schabeteil.

for anime in response.css('div.animeSearchResultBody'):
    yield {
        'title': anime.css('span.animeTitle a::text').extract_first(),
        'score': anime.css('span.totalRank::text').extract_first()
    }

In Scrapy können Sie mit css und xpath auf die Daten zugreifen, aber diesmal habe ich sie mit css geschrieben.

Auf dieser Site wurde jede Beschreibung der Animation durch das "div" -Tag der "animeSearchResultBody" -Klasse getrennt, sodass die Informationen aller auf der Seite angezeigten Animationen wie folgt erfasst werden. Ich werde.

response.css('div.animeSearchResultBody')

Ich möchte nur den Titel und die Gesamtbewertung aus den extrahierten Animationsinformationen, daher werde ich sie wie folgt extrahieren.

yield {
    'title': anime.css('span.animeTitle a::text').extract_first(),
    'score': anime.css('span.totalRank::text').extract_first()
}

extract_first () extrahiert das erste Element.

anime.css('span.animeTitle a::text')[0].extract()

Sie können auch per Index als darauf zugreifen, aber ich verwende dies, weil es Indexfehler verhindert und None zurückgibt.

Krabbeln

Das Crawlen erfolgt an folgenden Stellen.

next_page = response.css('a.next::attr(href)').extract_first()
if next_page is not None:
    next_page = response.urljoin(next_page)
    yield scrapy.Request(next_page, callback=self.parse)

Die URL der nächsten Seite wird durch Angabe der href-Zeichenfolge der Schaltfläche Weiter erstellt. Durch rekursives Aufrufen der Funktion parse () werden alle Seiten gecrawlt, bis keine Seiten mehr vorhanden sind.

Lauf

Lassen Sie uns zum Schluss das Programm ausführen. Ich habe den Ausführungsbefehl in "Spider Name" eingeführt, aber ich werde eine Option hinzufügen und sie als Datei im JSON-Format ausgeben. Geben Sie den folgenden Befehl in das Projektverzeichnis ein.

% scrapy crawl anime -o anime.json

Ich habe den Titel und die Gesamtbewertung des Winteranimes 2016 erhalten.

Werbung

Wir haben ein Video geliefert, das Scrapy kurz erklärt. Hier kratzen wir mit XPath.

"Scrapy: Sammeln Sie automatisch Informationen auf WEB-Seiten! Crawling & Scraping Framework" https://www.youtube.com/watch?v=Zfcukqxvia0&t=3s

Verweise

https://doc.scrapy.org/en/1.2/intro/tutorial.html https://ja.wikipedia.org/wiki/ウェブスクレイピング

Recommended Posts

Ich habe versucht, mit Scrapy Daten von einer Website zu sammeln
Ich habe versucht, Daten aus einer Datei mit Node.js zu lesen.
Ich habe versucht, Konversationsdaten von ASKfm zu kratzen
Ich habe versucht, Faktoren mit Titanic-Daten zu analysieren!
Ich habe eine funktionale Sprache mit Python ausprobiert
[Data Science-Grundlagen] Ich habe versucht, mit Python von CSV auf MySQL zu speichern
Ich habe versucht, mit django eine E-Mail zum Abschluss der Registrierung von Google Mail zu senden.
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, die Hauptkomponenten mit Titanic-Daten zu analysieren!
Ich habe DBM mit Pylearn 2 unter Verwendung künstlicher Daten ausprobiert
Ich habe versucht, die Datenbank (sqlite3) mit kivy zu verwenden
Extrahieren Sie mit Python Daten von einer Webseite
Ich habe versucht, Python aus einer Bat-Datei auszuführen
Ich habe einen einfachen RPA für die Anmeldung mit Selen ausprobiert
[Grundlagen der Datenwissenschaft] Sammeln von Daten aus RSS mit Python
Ich habe versucht, einen Pandas-Datenrahmen zu erstellen, indem ich mit Python Informationen zum Lebensmittelrückruf abgekratzt habe
Ich habe fp-Wachstum mit Python versucht
Ich habe versucht, mit Python zu kratzen
Ich habe eine Funktion zum Abrufen von Daten aus der Datenbank spaltenweise mithilfe von SQL mit SQLite3 von Python [SQLite3, SQL, Pandas] erstellt.
Ich habe versucht, mit Elasticsearch Ranking zu lernen!
Ich habe versucht, mit PyCaret zu clustern
Ich habe gRPC mit Python ausprobiert
Ich habe versucht, mit Python zu kratzen
Ich habe versucht, mit Quantx eine Linie mit gleitendem Durchschnitt des Volumens zu implementieren
Ich habe versucht, die Python-Bibliothek von Ruby mit PyCall zu verwenden
Ich habe versucht, mit Python faker verschiedene "Dummy-Daten" zu erstellen
Ich habe versucht, mit Python eine E-Mail von Amazon SES zu senden
Ich habe versucht, automatisch einen Bericht mit der Markov-Kette zu erstellen
[Linux] Kopieren Sie Daten mit einem Shell-Skript von Linux nach Windows
Ich habe versucht, die Windows 10-Festplatte durch eine kleinere SSD zu ersetzen
Ich habe versucht, das Problem der Kombinationsoptimierung mit Qiskit zu lösen
Ich habe versucht, mit Hy ・ Define a class zu beginnen
Xpath-Zusammenfassung beim Extrahieren von Daten von einer Website mit Python Scrapy
Ich möchte das Paket aus den Anforderungen.txt mit Poesie installieren
Ich habe versucht, eine zufällige FizzBuzz-Spalte mit Blasensortierung zu sortieren.
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren
Ich habe versucht, in einem tief erlernten Sprachmodell zu schreiben
Ich habe versucht, mit pypyodbc schnell Daten von AS / 400 abzurufen
Ich habe einen Server mit Python-Socket und SSL erstellt und versucht, über den Browser darauf zuzugreifen
Ich habe versucht, einen Generator zu erstellen, der mit Python eine C # -Containerklasse aus CSV generiert
Ich habe versucht, mit Docker einen Dienst aufzubauen, der maschinell erlernte Daten mit explosiver Geschwindigkeit verkauft
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe AdaNet gegen Tabellendaten ausprobiert
Welche Fähigkeiten sollte ich als Datenanalyst von unerfahrenen studieren?
Kann ich Datenwissenschaftler werden?
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, Sätze mit summpy zusammenzufassen
Ein Memorandum beim automatischen Erwerb mit Selen
Ich habe versucht, WebScraping mit Python.
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, Essen mit SinGAN zu bewegen
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Ich habe mit Python eine Lotterie gemacht.
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Holen Sie sich Daten von VPS MySQL mit Python 3 und SQL Alchemy
[Pandas] Ich habe versucht, Verkaufsdaten mit Python zu analysieren. [Für Anfänger]