2023/02/12
久々にWebスクレイピングを触っています。事務作業でWebアプリを操作することがあり、何度も同じ作業を行うのはイライラするので(元からのイラチ?)、RPA(Robotic Process Automation)で楽をしようという所です。
前回のブログの「Power AutomateでOutlookメールを抽出する」もその一環の話です。
日経電子版をスクレイピングする話は過去に2回話をしました。
1回目は、FirefoxのWebdriverを使って、SeleniumとBeautiful Soupを用いて、日経記事の中から特定のキーワードの記事のタイトルとURLを取得するものでした。
2回目は具体的にその記事をダウンロードし、その内容をword2vecで処理するお話しでした。他にも、SeleniumのラッパーのHeliumというものも試して
ブログでお話ししました。
今回は、ChromeのWebdriverとSeleniumを使って、日経新聞の「私の履歴書」の記事をpdfファイルにする計画です。私の履歴書は月替わりで著名人が自らの半生を語ったものです。故人を含め過去の記事も日経新聞の電子版で閲覧できますが、いつ閲覧できなくなるか分からないので、まとめてダウンロードしておきたいと思いました。

ただし、一括ダウンロードという機能はありませんので、日毎の記事を1か月分根気よくダウンロードする必要があります。

まずは、日経電子版のサイトにログインして、目的の著名人のページに行き、そのページの中の1か月分(日毎)の記事のリンクURLをファイルに保存する所までを自動化しました。
作成したプログラムは以下の通りです。
# scraping.py
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome('./chromedriver')
# Login Page
driver.get('https://r.nikkei.com/login')
time.sleep(2)
username = "-- My username --"
password = "-- My password --"
login_username = driver.find_element(By.ID, "LA7010Form01:LA7010Email")
login_username.clear()
login_username.send_keys(username)
login_password = driver.find_element(By.ID,"LA7010Form01:LA7010Password")
login_password.clear()
login_password.send_keys(password)
driver.find_element(By.CLASS_NAME, 'btnM1').click() # Login button click
time.sleep(2)
# Target URL list
url_list = ['https://www.nikkei.com/stories/******']
# Open target page
for url_target in url_list:
driver.get(url_target)
time.sleep(2)
elements_article = driver.find_elements(By.TAG_NAME, 'article')
with open("urls.txt", mode="a") as f:
for article in elements_article:
print((article.text).split('\n')[1])
href_dat = article.find_element(By.TAG_NAME, 'a').get_attribute('href')
print(href_dat)
f.write(href_dat + '\n')
f.close()
driver.quit()
このプログラムを実行させると、以下の通り、日毎の記事のタイトルとURLを取り込んで、

ファイル保存(urls.txt)できました。

プログラムの補足ですが、24行目までで日経新聞のサイトにログインします。23行目のログインボタンのオブジェクト名('btnM1')はブラウザ上で「右クリック-検証」をして、Chromeのデベロッパーツールから確認できます。


27行目で目的の著名人の集約ページのURLを設定し、34行目以降で日毎データ抽出処理を行いました。27行目のリストには複数のURLを登録できます。
日毎データはarticleタグ内に書かれてありましたので、そこからタイトルとURLを取得しました。

URLは38行目のようにaタグの情報から取得できました。

次回は、今回取得したURLを用いてpdfファイルに出力する所までのお話をします。