ホームページ >バックエンド開発 >Python チュートリアル >Scrapy はニュース Web サイトのデータ収集と分析を実装します
インターネット技術の継続的な発展により、人々が時事情報を入手する主な方法はニュース Web サイトになりました。ニュース Web サイトからデータを迅速かつ効率的に収集して分析する方法は、現在のインターネット分野における重要な研究方向の 1 つとなっています。この記事では、Scrapy フレームワークを使用してニュース Web サイトのデータ収集と分析を実装する方法を紹介します。
1. Scrapy フレームワークの概要
Scrapy は、Python で書かれたオープンソースの Web クローラー フレームワークで、Web サイトから構造化データを抽出するために使用できます。 Scrapy フレームワークは Twisted フレームワークに基づいており、大量のデータを迅速かつ効率的にクロールできます。 Scrapy には次の機能があります:
2. ニュース Web サイトのデータ収集
ニュース Web サイトのデータ収集には、Scrapy フレームワークを使用してニュース Web サイトをクロールできます。以下では、新浪ニュース Web サイトを例として、Scrapy フレームワークの使用法を紹介します。
コマンド ラインに次のコマンドを入力して、新しい Scrapy プロジェクトを作成します:
scrapy startproject sina_news
このコマンドは、sina_news という名前の新しい Scrapy プロジェクトを現在のディレクトリに作成します。
新しい 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 セレクター構文を使用してニュースのタイトル、リンク、リリース時刻を抽出し、この情報を辞書の形式で返します。
スパイダーの作成が完了したら、スパイダーを実行してデータをクロールできます。コマンドラインに次のコマンドを入力します:
scrapy roll sina_news -o sina_news.json
このコマンドは、「sina_news」スパイダーを開始し、クロールされたデータを sina_news .json という名前のファイルに保存します。 JSONファイル。
3. ニュース Web サイトのデータ分析
データ収集が完了したら、収集したデータを分析し、そこから貴重な情報を抽出する必要があります。
大規模なデータを収集すると、ノイズの多いデータに遭遇することがよくあります。したがって、データ分析を行う前に、収集したデータをクリーンアップする必要があります。以下では、Python Pandas ライブラリを例として使用して、データ クリーニングを実行する方法を紹介します。
収集された新浪ニュース データを読み取ります:
import pandas as pd
df = pd.read_json('sina_news.json')
これで、 DataFrame タイプのデータセット。このデータ セットに重複データがあると仮定すると、データ クリーニングに Pandas ライブラリを使用できます。
df.drop_duplicates(inplace=True)
上記のコード行は、データセット内のデータが重複しています。
データ クリーニング後、収集されたデータをさらに分析できます。ここでは、一般的に使用されるデータ分析手法をいくつか紹介します。
(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 サイトの他の関連記事を参照してください。