fc2ブログ

日経電子版記事をスクレイピングする(3)

 久々に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ファイルにする計画です。私の履歴書は月替わりで著名人が自らの半生を語ったものです。故人を含め過去の記事も日経新聞の電子版で閲覧できますが、いつ閲覧できなくなるか分からないので、まとめてダウンロードしておきたいと思いました。nikkei_230212_1.pngただし、一括ダウンロードという機能はありませんので、日毎の記事を1か月分根気よくダウンロードする必要があります。nikkei_230212_2.png まずは、日経電子版のサイトにログインして、目的の著名人のページに行き、そのページの中の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を取り込んで、scraping_run_230212_1.pngファイル保存(urls.txt)できました。scraping_run_230212_2.png
プログラムの補足ですが、24行目までで日経新聞のサイトにログインします。23行目のログインボタンのオブジェクト名('btnM1')はブラウザ上で「右クリック-検証」をして、Chromeのデベロッパーツールから確認できます。scraping_coding_230212_1.pngscraping_coding_230212_2.png27行目で目的の著名人の集約ページのURLを設定し、34行目以降で日毎データ抽出処理を行いました。27行目のリストには複数のURLを登録できます。

日毎データはarticleタグ内に書かれてありましたので、そこからタイトルとURLを取得しました。scraping_coding_230212_3.pngURLは38行目のようにaタグの情報から取得できました。scraping_coding_230212_4.png
次回は、今回取得したURLを用いてpdfファイルに出力する所までのお話をします。
スポンサーサイト



コメント

非公開コメント

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

Author: Dr.BobT
興味のおもむくままに生涯考え続けるエンジニアでありたい。

月別アーカイブ

メールフォーム

名前:
メール:
件名:
本文: