fc2ブログ

Heliumを使う

 ブラウザの自動操作ツールのSeleniumのラッパーでHeliumというものがあり、大変便利だという情報がありましたので、早速使ってみました。SeleniumとHelium、双方、原子名で合わせていますね。Seleniumは原子番号34で元素記号はSe、Heliumは原子番号2で元素記号はHeです(どうでもいい話ですが・・)。

 何はともあれ、日経電子版の個人のページにログインして「Myニュース」の最新記事のタイトルをcsvファイルに保存するコードを書いてみました。
from helium import *
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()
 9行目で8行目のURLに接続します。Helium1_210613.pngこのページの「ログイン」を11行目でクリックします。コードも直感的で分かりやすいです。あえて「ログインボタン」のオブジェクト名やIDを探しに行かなくて良いのは非常に楽です。ログインボタンを押すと、ログイン画面が出てきますので、Helium2_210613.png12、13行目でメールアドレスとパスワードを入力(write)して「ログイン」ボタンを押すと(click)、個人ページが表示されるので、Helium3_210613.pngその中の「Myニュース」ボタンを押します(click)。Helium4_210613.png Myニュースが表示されるまで時間がかかるので、10秒程度待ちを入れました。

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

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



コメント

非公開コメント

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

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

月別アーカイブ

メールフォーム

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