指定したキーワードの新しいニュースのみを表示 Googleニュース

スポンサーリンク
Python/DeepLearning
スポンサーリンク

この記事で出来ること

[誰に]
 ・毎日、特定のキーワードで新しいニュースを検索している方(Googleニュース)

[何を]
 ・新しいニュースのみを表示できるスクリプトを作成
 ・一度見た記事は表示されないので、新規情報が分かりやすい

環境

Google Colaboratory

使い方

  1. 好きな検索キーワードをkeywordsに設定。キーワードは” “で括り、,で区切る。
  2. 各キーワードで検索する記事数をnumber_searchesに設定
  3. 検索キーワード入力は、通常のGoogle検索と同じ (例えば、複数キーワードはスペースで区切る、省きたいキーワードは頭にハイフンを付ける「-〇〇」)

サンプルコード

下記のコードをGoogle Colaboratoryへコピペしてお使いください。

# 検索キーワードを入れてください
keywords = ["岡崎 -慎司", "岡崎", "安城", "幸田", "岡崎 安城 幸田"]
# 記事の上位検索数
number_searches = 10



# Pythonのお勉強 No.3 HTMLデータの抽出、整形
import requests
import urllib
from bs4 import BeautifulSoup
from google.colab import files

from google.colab import drive
drive.mount('/content/drive')

import pandas as pd


url = 'https://news.google.com/search'

for keyword in keywords:
    print("★「"+str(keyword)+"」"+"の最新ニュースを検索★")
    params = {'hl':'ja', 'gl':'JP', 'ceid':'JP:ja', 'q':keyword}
    article_no = 1

    # url、パラメータを設定してリクエストを送る
    res = requests.get(url, params=params)
    # レスポンスをBeautifulSoupで解析する
    soup = BeautifulSoup(res.content, "html.parser")

    # レスポンスからh3階層のニュースを抽出する(classにxrnccdを含むタグ)
    h3_blocks = soup.select(".xrnccd")

    for i, h3_entry in enumerate(h3_blocks):

        # 記事を10件だけ処理する
        if article_no == (number_searches + 1):
            break


        
        with open('/content/drive/My Drive/Colab Notebooks/result.csv', mode='a') as f:
            # ニュースのタイトルを抽出する(h3タグ配下のaタグの内容)
            h3_title = h3_entry.select_one("h3 a").text
            # ニュースのリンクを抽出する(h3タグ配下のaタグのhref属性)
            h3_link = h3_entry.select_one("h3 a")["href"]
            # 抽出したURLを整形して絶対パスを作る
            h3_link = urllib.parse.urljoin(url, h3_link)

            # 前回スクレイピングした結果と比較する
            try:
                df = pd.read_csv('/content/drive/My Drive/Colab Notebooks/result.csv', header=None)
            except:
                df = pd.DataFrame(["log取得開始"])

            flag = 0
            for index, row in df.iterrows():

                if (str(row[0]) == str(h3_title)):
                  flag = 1
                  print(" 過去の記事と一致しました")
                  break

            if flag == 0:
                # ニュースのタイトル、リンクをファイルに書き込む
                f.write(h3_title)
                f.write('\r\n')
                print(h3_title)
                print(h3_link)

            article_no = article_no + 1

    print('\n')

過去のニュースのタイトルをresult.csvに記録しておいて、そのタイトルと一致した場合は表示しないようにしています。そうすることで、新しいニュースのみ表示することができます。

実行結果

Python/DeepLearning
スポンサーリンク
記事が良かったらSNSでシェアを宜しくお願いします!
みやしんをフォローすると役立つ情報がいっぱいにゃ!
スポンサーリンク

コメント

タイトルとURLをコピーしました