この記事で出来ること
[誰に]
・毎日、特定のキーワードで新しいニュースを検索している方(Googleニュース)
[何を]
・新しいニュースのみを表示できるスクリプトを作成
・一度見た記事は表示されないので、新規情報が分かりやすい

環境
Google Colaboratory
使い方
- 好きな検索キーワードをkeywordsに設定。キーワードは” “で括り、,で区切る。
- 各キーワードで検索する記事数をnumber_searchesに設定
- 検索キーワード入力は、通常の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に記録しておいて、そのタイトルと一致した場合は表示しないようにしています。そうすることで、新しいニュースのみ表示することができます。
実行結果


コメント