Heim  >  Artikel  >  Backend-Entwicklung  >  Scrapy-Übung: Crawlen und Analysieren von Daten aus einem Spieleforum

Scrapy-Übung: Crawlen und Analysieren von Daten aus einem Spieleforum

WBOY
WBOYOriginal
2023-06-22 09:04:39869Durchsuche

In den letzten Jahren ist die Verwendung von Python für Data Mining und Analyse immer häufiger geworden. Scrapy ist ein beliebtes Tool zum Scrapen von Website-Daten. In diesem Artikel stellen wir vor, wie man mit Scrapy Daten aus einem Spieleforum für die anschließende Datenanalyse crawlt.

1. Wählen Sie das Ziel aus

Zuerst müssen wir eine Zielwebsite auswählen. Hier wählen wir ein Spieleforum.

Wie im Bild unten gezeigt, enthält dieses Forum verschiedene Ressourcen, wie z. B. Spielanleitungen, Spiel-Downloads, Spielerkommunikation usw.

Unser Ziel ist es, den Titel des Beitrags, den Autor, den Zeitpunkt der Veröffentlichung, die Anzahl der Antworten und andere Informationen für die anschließende Datenanalyse zu erhalten.

2. Erstellen Sie ein Scrapy-Projekt

Bevor wir mit dem Crawlen von Daten beginnen, müssen wir ein Scrapy-Projekt erstellen. Geben Sie in der Befehlszeile den folgenden Befehl ein:

scrapy startproject forum_spider

Dadurch wird ein neues Projekt mit dem Namen „forum_spider“ erstellt.

3. Scrapy-Einstellungen konfigurieren

In der Datei „settings.py“ müssen wir einige Einstellungen konfigurieren, um sicherzustellen, dass Scrapy die erforderlichen Daten von der Forum-Website erfolgreich crawlen kann. Im Folgenden sind einige häufig verwendete Einstellungen aufgeführt:

BOT_NAME = 'forum_spider'

SPIDER_MODULES = ['forum_spider.spiders']
NEWSPIDER_MODULE = 'forum_spider.spiders'

ROBOTSTXT_OBEY = False # 忽略robots.txt文件
DOWNLOAD_DELAY = 1 # 下载延迟
COOKIES_ENABLED = False # 关闭cookies

4. Spider schreiben

In Scrapy ist Spider die Klasse, die für die eigentliche Arbeit (d. h. das Crawlen der Website) verwendet wird. Wir müssen einen Spider definieren, um die erforderlichen Daten aus dem Forum zu erhalten.

Wir können Scrapys Shell verwenden, um unseren Spider zu testen und zu debuggen. Geben Sie in der Befehlszeile den folgenden Befehl ein:

scrapy shell "https://forum.example.com"

Dadurch wird eine interaktive Python-Shell mit dem Zielforum geöffnet.

In der Shell können wir den folgenden Befehl verwenden, um den erforderlichen Selektor zu testen:

response.xpath("xpath_expression").extract()

Hier sollte „xpath_expression“ der XPath-Ausdruck sein, der zur Auswahl der erforderlichen Daten verwendet wird.

Zum Beispiel wird der folgende Code verwendet, um alle Threads im Forum abzurufen:

response.xpath("//td[contains(@id, 'td_threadtitle_')]").extract()

Nachdem wir den XPath-Ausdruck festgelegt haben, können wir einen Spider erstellen.

Im Spiders-Ordner erstellen wir eine neue Datei namens „forum_spider.py“. Das Folgende ist der Code von Spider:

import scrapy

class ForumSpider(scrapy.Spider):
    name = "forum"
    start_urls = [
        "https://forum.example.com"
    ]

    def parse(self, response):
        for thread in response.xpath("//td[contains(@id, 'td_threadtitle_')]"):
            yield {
                'title': thread.xpath("a[@class='s xst']/text()").extract_first(),
                'author': thread.xpath("a[@class='xw1']/text()").extract_first(),
                'date': thread.xpath("em/span/@title").extract_first(),
                'replies': thread.xpath("a[@class='xi2']/text()").extract_first()
            }

Im obigen Code definieren wir zunächst den Namen von Spider als „Forum“ und legen eine Start-URL fest. Anschließend haben wir die Methode parse() definiert, um die Antwort der Forumseite zu verarbeiten.

In der parse()-Methode verwenden wir XPath-Ausdrücke, um die benötigten Daten auszuwählen. Als nächstes verwenden wir die yield-Anweisung, um die Daten in einem Python-Wörterbuch zu generieren und zurückzugeben. Das bedeutet, dass unser Spider alle Threads auf der Forum-Homepage nacheinander crawlt und die erforderlichen Daten extrahiert.

5. Spider ausführen

Bevor wir Spider ausführen, müssen wir sicherstellen, dass Scrapy korrekt konfiguriert wurde. Mit dem folgenden Befehl können wir testen, ob der Spider ordnungsgemäß funktioniert:

scrapy crawl forum

Dadurch wird unser Spider gestartet und die gescrapten Daten in der Konsole ausgegeben.

6. Datenanalyse

Nachdem wir die Daten erfolgreich gecrawlt haben, können wir einige Python-Bibliotheken (wie Pandas und Matplotlib) verwenden, um die Daten zu analysieren und zu visualisieren.

Wir können die gecrawlten Daten zunächst als CSV-Datei speichern, um die Datenanalyse und -verarbeitung zu erleichtern.

import pandas as pd

df = pd.read_csv("forum_data.csv")
print(df.head())

Dadurch werden die ersten fünf Datenzeilen in der CSV-Datei angezeigt.

Wir können Bibliotheken wie Pandas und Matplotlib verwenden, um statistische Analysen und Visualisierung von Daten durchzuführen.

Hier ist ein einfaches Beispiel, in dem wir die Daten nach der Veröffentlichungszeit sortieren und die Gesamtzahl der Beiträge grafisch darstellen.

import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv("forum_data.csv")

df['date'] = pd.to_datetime(df['date']) #将时间字符串转化为时间对象
df['month'] = df['date'].dt.month

grouped = df.groupby('month')
counts = grouped.size()

counts.plot(kind='bar')
plt.title('Number of Threads by Month')
plt.xlabel('Month')
plt.ylabel('Count')
plt.show()

Im obigen Code haben wir die Veröffentlichungszeit in ein Python-Datetime-Objekt umgewandelt und die Daten nach Monat gruppiert. Anschließend haben wir mit Matplotlib ein Histogramm erstellt, um die Anzahl der jeden Monat veröffentlichten Beiträge anzuzeigen.

7. Zusammenfassung

Dieser Artikel stellt vor, wie man Scrapy zum Crawlen von Daten aus einem Spieleforum verwendet, und zeigt, wie man die Pandas- und Matplotlib-Bibliotheken von Python für die Datenanalyse und -visualisierung verwendet. Bei diesen Tools handelt es sich um Python-Bibliotheken, die im Bereich der Datenanalyse sehr beliebt sind und zur Erkundung und Visualisierung von Website-Daten verwendet werden können.

Das obige ist der detaillierte Inhalt vonScrapy-Übung: Crawlen und Analysieren von Daten aus einem Spieleforum. 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