LoginSignup
0
5

More than 1 year has passed since last update.

ニュース記事をスクレイピング

Last updated at Posted at 2022-01-14

はじめに

Googleのニュースサイト( https://news.google.com/rss?hl=en-US&gl=US&ceid=US:en )のデータを取得し、翻訳し、Firebaseに保管する方法について、まとめていきます。

Pythonを用いていきます。適宜、必要なライブラリは、インストールします。
必要なライブラリは、下の二つです。
- beautifulsoup4
- requests

目次

  1. ニュースサイト情報
  2. スクレイピングのコード
  3. 参考文献

ニュースサイト情報

ニュース記事は、https://news.google.com/rss?hl=en-US&gl=US&ceid=US:en から取得します。開いたイメージは次のようになっています。
記事のページ

urlを変化させることで、検索ワードに関する記事を取得できる他、ニュースサイトの指定、期間の指定を行えます。具体的な手法は、下を参考にしてください。
参考: Google News Rss(API)

スクレイピングのコード

スクレイピングには、主に2種類の方法が存在します。あくまで、使ってみた経験で話していきます。
1. urllib.requestとBeautifulSoupを使う方法
2. Seleniumを使う方法

1 を使うのは、比較的簡単なWebページの場合に限られます。現在のWebページの多くは、Java Scriptなどを用いた、動的なページが多いです。動的なページでは、うまく種得できません。今回のニュースページは、明らかに、人が閲覧するためのサイトではなく、スクレイピングするためのページです。ですので、今回は1 を使っていきます。

2 を使う場合が多いと、個人的には感じています。2 は、Google Chromeで検証ページに表示されるHTMLをそのまま、取得できます。汎用的な方法で、あらゆるタイプのサイトに使えます。しかし、処理が遅いことや、Chrome driverを適切なバージョンにしておかなければなりません。

実際のコードは次のようになります。

get_news.py
from urllib import request
from bs4 import BeautifulSoup

url = "https://news.google.com/rss?hl=en-US&gl=US&ceid=US:en"
response = request.urlopen(url)
soup = BeautifulSoup(response,"xml")
response.close()
articles = soup.find_all("item")
  1. urlを定義する
  2. urlのページを開いた情報を取得する
  3. 取得した情報をxml形式で、情報変化する
  4. その中で、itemタグを持つデータを抜き出す

itemタグで、記事のデータがまとめられている。取得すると、一つ一つの記事は、次のようになっています。タイトルとid、投稿日時、説明、ソースがまとめられています。

itemの中身
<item>
<title>Biden says he's "not sure" about voting bills' future after Sinema reiterates opposition to rule change - CBS News</title>
<link>https://news.google.com/__i/rss/rd/articles/CBMiTmh0dHBzOi8vd3d3LmNic25ld3MuY29tL25ld3Mva3lyc3Rlbi1zaW5lbWEtdm90aW5nLXJpZ2h0cy1zZW5hdGUtcnVsZXMtc3BlZWNoL9IBAA?oc=5</link>
<guid isPermaLink="false">1222244172</guid>
<pubDate>Thu, 13 Jan 2022 23:58:00 GMT</pubDate>
<description>説明部分は長いので、省略</description>
<source url="https://www.cbsnews.com">CBS News</source>
</item>,

そして、この記事ごとのデータを取得する方法としては、下に示します。下では、タイトルを取得する方法です。"title"の部分を、linkやsourceに変えて、欲しいデータを取得します。

get_news.py
title = item.find("title").getText()

参考文献

0
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
5