Ich habe ein paar grundlegende Crawls und Scraping mit Scrapy gemacht.
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/
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.
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)
name = "anime"
Dies ist der Name von Spider. Verwenden Sie beim Scraping den hier deklarierten Namen wie folgt.
% scrapy crawl anime
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.
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.
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.
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.
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
https://doc.scrapy.org/en/1.2/intro/tutorial.html https://ja.wikipedia.org/wiki/ウェブスクレイピング