近年、データマイニングと分析に 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 サイトの他の関連記事を参照してください。