2021/06/13
Heliumを使う
ブラウザの自動操作ツールのSeleniumのラッパーでHeliumというものがあり、大変便利だという情報がありましたので、早速使ってみました。SeleniumとHelium、双方、原子名で合わせていますね。Seleniumは原子番号34で元素記号はSe、Heliumは原子番号2で元素記号はHeです(どうでもいい話ですが・・)。何はともあれ、日経電子版の個人のページにログインして「Myニュース」の最新記事のタイトルをcsvファイルに保存するコードを書いてみました。
from helium import *9行目で8行目のURLに接続します。
import bs4
import re
import csv
import time
# Helium
url = 'https://www.nikkei.com/'
driver = start_chrome(url)
click('ログイン')
write('my mail address', into='メールアドレス')
write('my password', into='パスワード')
click('ログイン')
click('Myニュース')
time.sleep(10) # time wait
# Beautiful soup4
html = driver.page_source
soup = bs4.BeautifulSoup(html, "lxml")
# Items search
item = soup.find_all('h3')
# Delete Tags
for i in range(0, len(item)):
item_temp = re.sub(r'<h3.*>\n', '', str(item[i]), 1)
item_temp = re.sub(r'<a href.*">', '', item_temp, 1)
item_temp = re.sub(r'</a>\n</h3>', '', item_temp, 1)
item[i] = re.sub(r'\u3000', ' ', item_temp, 1)
print(item[i])
# Results output
with open("items.csv", 'w') as f:
writer = csv.writer(f, delimiter='\n')
writer.writerow(item)
time.sleep(5) # time wait
kill_browser()




Heliumでは記事の中身もある程度抽出できるようですが、不慣れで時間がかかりそうだったので、定番のBeautiful Soupでこのページ情報を取得し、目的部分を抽出しました。コードの20行目以降です。27〜32行目はタグを除き、必要な部分の文字列を抽出しています。最後にcsvファイル出力し、ブラウザを閉じます。結果のcsvファイルは以下の通りです。

Seleniumに比べ、直感的にブラウザの操作のコードを書くことができ、非常に分かりやすいと思いました。また、Webスクレイピングする時に利用してみようと思います。