目次
はじめに
気になっている企業のニュースを知りたいときに、自動で収集しておいてくれる仕組みについて調べました。
NewsAPI
本記事ではNewsAPIを用いたデータ取得方法を実装しています。登録は無償ですが、いくつか制限がありますので必ず確認の上利用するようにしてください。
サンプルコード
以下に、外部から企業名を指定し、過去1か月分のニュースを取得する関数を示します。APIKEYについては上記のサイトに登録、取得して使うようにしてください。
import requests
from datetime import datetime, timedelta
from newspaper import Article
def fetch_news(company_name: str):
# News APIのAPIキーを設定
api_key = "APIKEYを取得してここに設定します"
# 一か月前の日付を取得
one_month_ago = datetime.now() - timedelta(weeks=4)
date_string = one_month_ago.strftime("%Y-%m-%d")
# APIリクエストのパラメータを設定
params = {
"apiKey": api_key,
"q": company_name,
"from": date_string,
"to": datetime.now().strftime("%Y-%m-%d"),
"sortBy": "publishedAt",
"pageSize": 100
}
# News APIのエンドポイントURL
url = "https://newsapi.org/v2/everything"
# APIリクエストを実行
response = requests.get(url, params=params)
# レスポンスが成功した場合、ニュース記事を出力
if response.status_code == 200:
news_data = response.json()
articles = news_data["articles"]
for article in articles:
print(f"タイトル: {article['title']}")
print(f"日時: {article['publishedAt']}")
# URLから本文を取得
article_url = article['url']
news_article = Article(article_url)
news_article.download()
news_article.parse()
print(f"コンテンツ: {news_article.text}")
print("\n")
else:
print("Error fetching news")
# 過去1か月分のトヨタのニュースを取得する
fetch_news("トヨタ")
このコードでは、fetch_news
関数を定義し、引数として企業名(company_name
)を受け取ります。関数内で、過去1か月分のニュースを取得するように日付範囲を変更し、指定された企業名のニュースを取得します。関数の最後に、過去1か月分のトヨタのニュースを取得するために、fetch_news("トヨタ")
を呼び出しています。
まとめ
NewsAPIを用いて特定の企業のニュース記事を収集する仕組みについて実装しました。
この後の作業としては正確に記事情報を取得するためのニュースソース絞り込みや対象ニュースサイトの記事本文の切り出しといった作業が残っています。また、NewsAPIの過去1か月分までの取得制限もあり、それ以前の記事を探す場合は別の方法での情報収集ということになります。
スクレイピングは禁止しているサイトも多いため、情報収集は慎重に行う必要があります。