Pythonでロイター、ブルームバーグ、YahooのRSSから経済関連のニュース情報を抽出する
経済ニュースを発信しているロイター、ブルームバーグ、YahooニュースのRSSから各記事の情報を取得するスクリプトを紹介します。
ロイターから抽出する
ロイターについてはこちらのページにカテゴリーごとのRSS情報が掲載されています。
経済ニュースとしては、以下のRSSから情報を取得すれば十分だと思います。
実際のコードはこちらです。タイトル、記事リンク、記事テキストを抽出し、print文で表示するようなコードとしています。
各カテゴリーの情報を取得するのにmain関数のurlを使っていますので、ここを書き換えればそれぞれのカテゴリーの記事を抽出できます。
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
def main():
print('rss上のニュースリストを抽出')
url = 'https://assets.wor.jp/rss/rdf/reuters/top.rdf'
html = requests.get(url)
soup = BeautifulSoup(html.content, "xml")
# スクレイピング
for rss in soup.find_all('item'):
link = rss.find("link").text
title = rss.title.string
article = extract_content(link)
print('タイトル:'+title)
print('リンク:'+link)
print('記事内容:')
print(article)
def extract_content(url):
# ニュース記事をダウンロードして解析
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
# 本文を取得して表示
article_body = soup.find("div", class_="ArticleBodyWrapper").find_all("p")
article_text = "\n".join([p.text.strip() for p in article_body])
return article_text
if __name__ == "__main__":
main()
ブルームバーグから抽出する
ブルームバーグについてもこちらのページにカテゴリーごとのRSS情報が掲載されています。
経済ニュースとしては、以下のリンクから抽出で良いでしょう。
コードはロイター抽出スクリプトのextract_content関数を少し変えただけです。
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
def main():
print('rss上のニュースリストを抽出')
url = 'https://assets.wor.jp/rss/rdf/bloomberg/top.rdf'
html = requests.get(url)
soup = BeautifulSoup(html.content, "xml")
# スクレイピング
for rss in soup.find_all('item'):
link = rss.find("link").text
title = rss.title.string
article = extract_content(link)
print('タイトル:'+title)
print('リンク:'+link)
print('記事内容:')
print(article)
def extract_content(url):
# ニュース記事をダウンロードして解析
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
# 本文を取得して表示
article_body = soup.find("div", class_="body-copy").find_all("p")
article_text = "\n".join([p.text.strip() for p in article_body])
return article_text
if __name__ == "__main__":
main()
Yahooニュースから抽出する
YahooニュースのRSSはこちらにまとめられています。
経済とITを抽出候補にするのが良さそうです。
カテゴリー | リンク |
---|---|
経済 | https://news.yahoo.co.jp/rss/categories/business.xml |
IT | https://news.yahoo.co.jp/rss/categories/it.xml |
Yahooニュースの場合は、記事が複数ページにまたがることがあるので、extract_content関数にその処理のためのコードを入れています。
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
def main():
print('rss上のニュースリストを抽出')
url = 'https://news.yahoo.co.jp/rss/categories/business.xml'
html = requests.get(url)
soup = BeautifulSoup(html.content, "xml")
# スクレイピング
for rss in soup.find_all('item'):
link = rss.find("link").text.replace('?source=rss','')
title = rss.title.string
article = extract_content(link)
print('タイトル:'+title)
print('リンク:'+link)
print('記事内容:')
print(article)
def extract_content(url):
#ページが複数にまたがる場合は、全ページのデータを取得
page = '?page='
num = 2
# ニュース記事をダウンロードして解析
res = requests.get(url)
soup = BeautifulSoup(res.text, 'html.parser')
article = soup.find('div', class_='article_body')
# 本文を取得
text = ""
for p in article.find_all('p'):
text += p.get_text()
# 2ページ目以降の処理
res_next = requests.get(url+page+str(num))
while res_next:
soup = BeautifulSoup(res_next.text, 'html.parser')
article = soup.find('div', class_='article_body')
for p in article.find_all('p'):
text += p.get_text()
num = num + 1
res_next = requests.get(url+page+str(num))
return text
if __name__ == "__main__":
main()
以上です。