ホームページ >バックエンド開発 >Python チュートリアル >卑劣な実践: ゲーム フォーラムからデータをクロールして分析する

卑劣な実践: ゲーム フォーラムからデータをクロールして分析する

WBOY
WBOYオリジナル
2023-06-22 09:04:39973ブラウズ

近年、データマイニングと分析に Python を使用することがますます一般的になってきています。 Scrapy は、Web サイトのデータをスクレイピングする際に人気のあるツールです。この記事では、その後のデータ分析のために Scrapy を使用してゲーム フォーラムからデータをクロールする方法を紹介します。

1. ターゲットを選択します

まず、ターゲット Web サイトを選択する必要があります。ここでは、ゲーム フォーラムを選択します。

下の図に示すように、このフォーラムには、ゲーム ガイド、ゲームのダウンロード、プレイヤーのコミュニケーションなど、さまざまなリソースが含まれています。

私たちの目標は、その後のデータ分析のために投稿のタイトル、著者、公開時刻、返信数、その他の情報を取得することです。

2. Scrapy プロジェクトの作成

データのクロールを開始する前に、Scrapy プロジェクトを作成する必要があります。コマンド ラインで、次のコマンドを入力します。

scrapy startproject forum_spider

これにより、「forum_spider」という名前の新しいプロジェクトが作成されます。

3. Scrapy 設定の構成

settings.py ファイルでは、Scrapy がフォーラム Web サイトから必要なデータを正常にクロールできるようにするために、いくつかの設定を構成する必要があります。以下は一般的に使用される設定の一部です:

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 の記述

Scrapy では、Spider は実際の作業 (つまり、Web サイトのクロール) を実行するために使用されるクラスです。フォーラムから必要なデータを取得するにはスパイダーを定義する必要があります。

Scrapy のシェルを使用して Spider をテストおよびデバッグできます。コマンド ラインで、次のコマンドを入力します。

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

これにより、ターゲット フォーラムで対話型の Python シェルが開きます。

シェルでは、次のコマンドを使用して、必要なセレクターをテストできます。

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

ここで、「xpath_expression」は、必要なデータを選択するために使用される XPath 式である必要があります。

たとえば、次のコードはフォーラム内のすべてのスレッドを取得するために使用されます:

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

XPath 式を決定した後、スパイダーを作成できます。

Spiders フォルダーに、「forum_spider.py」という新しいファイルを作成します。以下は 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()
            }

上記のコードでは、まず Spider の名前を「forum」として定義し、開始 URL を設定します。次に、フォーラム ページの応答を処理する parse() メソッドを定義しました。

parse() メソッドでは、XPath 式を使用して必要なデータを選択します。次に、yield ステートメントを使用してデータを Python 辞書に生成し、それを返します。これは、スパイダーがフォーラムのホームページ内のすべてのスレッドを 1 つずつクロールし、必要なデータを抽出することを意味します。

5. Spider の実行

Spider を実行する前に、Scrapy が正しく設定されていることを確認する必要があります。次のコマンドを使用して、スパイダーが適切に動作しているかどうかをテストできます。

scrapy crawl forum

これにより、スパイダーが開始され、キャプチャされたデータがコンソールに出力されます。

6. データ分析

データのクロールに成功したら、いくつかの Python ライブラリ (Pandas や Matplotlib など) を使用してデータを分析および視覚化できます。

データの分析と処理を容易にするために、まずクロールされたデータを CSV ファイルとして保存できます。

import pandas as pd

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

これにより、CSV ファイルの最初の 5 行のデータが表示されます。

Pandas や Matplotlib などのライブラリを使用して、データの統計分析と視覚化を実行できます。

これは、データを投稿時間で並べ替え、投稿の合計数をプロットする簡単な例です。

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()

上記のコードでは、リリース時刻を Python Datetime オブジェクトに変換し、データを月ごとにグループ化します。次に、Matplotlib を使用して、毎月公開される投稿の数を示すヒストグラムを作成しました。

7. 概要

この記事では、Scrapy を使用してゲーム フォーラムからデータをクロールする方法を紹介し、データ分析と視覚化に Python の Pandas ライブラリと Matplotlib ライブラリを使用する方法を示します。これらのツールは、データ分析の分野で非常に人気のある Python ライブラリであり、Web サイト データの探索と視覚化に使用できます。

以上が卑劣な実践: ゲーム フォーラムからデータをクロールして分析するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。