ホームページ >バックエンド開発 >Python チュートリアル >Scrapy はニュース Web サイトのデータ収集と分析を実装します

Scrapy はニュース Web サイトのデータ収集と分析を実装します

PHPz
PHPzオリジナル
2023-06-22 19:34:351471ブラウズ

インターネット技術の継続的な発展により、人々が時事情報を入手する主な方法はニュース Web サイトになりました。ニュース Web サイトからデータを迅速かつ効率的に収集して分析する方法は、現在のインターネット分野における重要な研究方向の 1 つとなっています。この記事では、Scrapy フレームワークを使用してニュース Web サイトのデータ収集と分析を実装する方法を紹介します。

1. Scrapy フレームワークの概要

Scrapy は、Python で書かれたオープンソースの Web クローラー フレームワークで、Web サイトから構造化データを抽出するために使用できます。 Scrapy フレームワークは Twisted フレームワークに基づいており、大量のデータを迅速かつ効率的にクロールできます。 Scrapy には次の機能があります:

  1. 強力な機能 - Scrapy は、カスタム リクエストとハンドラー、自動メカニズム、デバッグ ツールなど、多くの便利な機能を提供します。
  2. 柔軟な構成 - Scrapy フレームワークは、特定のクローラーのニーズに応じて柔軟に構成できる多数の構成オプションを提供します。
  3. 拡張が簡単 - Scrapy のアーキテクチャ設計は非常に明確で、簡単に拡張したり二次開発したりできます。

2. ニュース Web サイトのデータ収集

ニュース Web サイトのデータ収集には、Scrapy フレームワークを使用してニュース Web サイトをクロールできます。以下では、新浪ニュース Web サイトを例として、Scrapy フレームワークの使用法を紹介します。

  1. 新しい Scrapy プロジェクトの作成

コマンド ラインに次のコマンドを入力して、新しい Scrapy プロジェクトを作成します:

scrapy startproject sina_news

このコマンドは、sina_news という名前の新しい Scrapy プロジェクトを現在のディレクトリに作成します。

  1. Spider の作成

新しい Scrapy プロジェクトでは、Spider を作成することで Web クローリングを実装できます。 Scrapy では、Spider は Web サイトのデータをクロールする方法を定義するために使用される特別な Python クラスです。以下は、新浪ニュース Web サイトのスパイダーの例です。

import scrapy

class SinaNewsSpider(scrapy.Spider):
    name = 'sina_news'
    start_urls = [
        'https://news.sina.com.cn/', # 新浪新闻首页
    ]

    def parse(self, response):
        for news in response.css('div.news-item'):
            yield {
                'title': news.css('a::text').extract_first(),
                'link': news.css('a::attr(href)').extract_first(),
                'datetime': news.css('span::text').extract_first(),
            }

スパイダーは、ニュース Web サイトをクロールするためのルールと応答を解析する方法を定義します。上記のコードでは、「sina_news」という名前のスパイダーを定義し、開始 URL を新浪ニュースのホームページとして指定します。同時に、Web サイトの応答を解析する解析関数も定義しました。

この解析関数では、CSS セレクター構文を使用してニュースのタイトル、リンク、リリース時刻を抽出し、この情報を辞書の形式で返します。

  1. スパイダーの実行

スパイダーの作成が完了したら、スパイダーを実行してデータをクロールできます。コマンドラインに次のコマンドを入力します:

scrapy roll sina_news -o sina_news.json

このコマンドは、「sina_news」スパイダーを開始し、クロールされたデータを sina_news .json という名前のファイルに保存します。 JSONファイル。

3. ニュース Web サイトのデータ分析

データ収集が完了したら、収集したデータを分析し、そこから貴重な情報を抽出する必要があります。

  1. データ クリーニング

大規模なデータを収集すると、ノイズの多いデータに遭遇することがよくあります。したがって、データ分析を行う前に、収集したデータをクリーンアップする必要があります。以下では、Python Pandas ライブラリを例として使用して、データ クリーニングを実行する方法を紹介します。

収集された新浪ニュース データを読み取ります:

import pandas as pd

df = pd.read_json('sina_news.json')

これで、 DataFrame タイプのデータセット。このデータ セットに重複データがあると仮定すると、データ クリーニングに Pandas ライブラリを使用できます。

df.drop_duplicates(inplace=True)

上記のコード行は、データセット内のデータが重複しています。

  1. データ分析

データ クリーニング後、収集されたデータをさらに分析できます。ここでは、一般的に使用されるデータ分析手法をいくつか紹介します。

(1) キーワード分析

ニュースタイトルのキーワード分析を行うことで、今話題のトピックスを知ることができます。以下は、新浪ニュースのタイトルに関するキーワード分析の例です。

from jieba.analyse import extract_tags

keywords = extract_tags(df['title'].to_string(), topK=20 , withWeight=False,allowPOS=('ns', 'n'))
print(keywords)

上記のコードは、jieba ライブラリの extract_tags 関数を使用して、ニュース タイトルの上位 20 位のキーワードを抽出します。

(2) 時系列分析

ニュースタイトルを時系列に数えることで、ニュースの傾向を把握することができます。以下は、新浪ニュースの月別時系列分析の例です:

df['datetime'] = pd.to_datetime(df['datetime'])
df = df.set_index('datetime ')
df_month = df.resample('M').count()
print(df_month)

上記のコードは、ニュース リリース時刻を Pandas の Datetime 型に変換し、インデックスに設定します。データセットの。次に、リサンプル関数を使用して月をリサンプリングし、月ごとのニュース リリースの数を計算しました。

(3) 感情分析による分類

ニュースタイトルに対して感情分析を行うことでニュースを分類できます。以下は、新浪ニュースに関するセンチメント分析の例です。

from Snownlp import SnowNLP

df['sentiment'] = df['title'].apply(lambda x: SnowNLP(x ).sentiments)
positive_news = df[df['sentiment'] > 0.6]
negative_news = df[df['sentiment'] <= 0.4]
print('ポジティブなニュース数:' , len(positive_news))
print('ネガティブなニュース数:', len(negative_news))

上記のコードは、センチメント分析に SnowNLP ライブラリを使用し、センチメント値が 0.6 を超えるニュースをポジティブなニュースとして定義し、センチメント値が 0.4 以下のニュースをネガティブなニュースとして定義します。

4. 概要

この記事では、Scrapy フレームワークを使用してニュース Web サイトのデータを収集し、データのクリーニングと分析に Pandas ライブラリを使用する方法を紹介します。 Scrapy フレームワークは、大量のデータを迅速かつ効率的にクロールできる強力な Web クローラー機能を提供します。 Pandas ライブラリは、収集されたデータから貴重な情報を抽出するのに役立つ多くのデータ処理および統計分析関数を提供します。これらのツールを使用することで、現在注目されているトピックをより深く理解し、そこから有益な情報を得ることができます。

以上がScrapy はニュース Web サイトのデータ収集と分析を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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