100日後にエンジニアになるキミ - 75日目 - プログラミング - スクレイピングについて6
昨日までのはこちら
100日後にエンジニアになるキミ - 70日目 - プログラミング - スクレイピングについて
100日後にエンジニアになるキミ - 66日目 - プログラミング - 自然言語処理について
100日後にエンジニアになるキミ - 63日目 - プログラミング - 確率について1
100日後にエンジニアになるキミ - 59日目 - プログラミング - アルゴリズムについて
100日後にエンジニアになるキミ - 53日目 - Git - Gitについて
100日後にエンジニアになるキミ - 42日目 - クラウド - クラウドサービスについて
100日後にエンジニアになるキミ - 36日目 - データベース - データベースについて
100日後にエンジニアになるキミ - 24日目 - Python - Python言語の基礎1
100日後にエンジニアになるキミ - 18日目 - Javascript - JavaScriptの基礎1
100日後にエンジニアになるキミ - 14日目 - CSS - CSSの基礎1
100日後にエンジニアになるキミ - 6日目 - HTML - HTMLの基礎1
今回もスクレイピングの続きです。
Seleniumのインストールなどが終わっていたらその続きに入ります。
Seleniumの操作方法
Seleniumを読み込みする
ライブラリを読み込みします。
Google Chromeを動かすことを想定して・・
from selenium import webdriver
# ドライバー設定
chromedriver = "ドライバーのフルパス"
driver = webdriver.Chrome(executable_path=chromedriver)
WEBドライバーの保存先は人それぞれ違うと思うので書き換えてください。
これでGoogle Chromeが立ち上がるハズです。
なおエラーメッセージが出る場合、WEBドライバーとChromeのバージョンなども合わせないとダメです。またWEBドライバーを実行できるように権限設定することも必要場合があるので、エラー内容を見て適宜対処しましょう。
ここまで来たらブラウザを操作できる状態なのでいろいろ操作をしていきます。
一旦ブラウザを開くと、閉じる操作をするまで開きっぱなしになります。
大量に開くとリソースを消費するので、落とすのを忘れないようにしましょう。
またセレニウムを用いる際にヘッダーレス
モードで開くこともできます。
ヘッダーレス
モードはブラウザを目に見えるように立ち上げることをせずに裏側で動かすような仕組みです。
リソースの消費を防ぎ、LinuxサーバーなどでもSeleniumを使えるようになるので非常に便利なモードです。
書き方はブラウザのオプション
設定を追加する変数を作って
ヘッダーレス
設定を追加しWEBドライバーの呼び出しメソッドの引数に追加します。
オプション変数 = webdriver.ChromeOptions()
オプション変数.add_argument('--headless')
ドライバー変数 = webdriver.Chrome(options=オプション変数)
from selenium import webdriver
# ドライバー設定
chromedriver = "ドライバーのフルパス"
# オプション設定
options = webdriver.ChromeOptions()
options.add_argument('--headless')
# ドライバーの呼び出し
driver = webdriver.Chrome(executable_path=chromedriver,
options=options)
SeleniumでWEBサイトにアクセスする
seleniumを呼び出した際の変数を用いて操作を行っていきます。
先ほどはdriver
と言う変数名で呼び出しているのでここからはそれをドライバー変数
とします。
WEBサイトにアクセスするには
ドライバー変数.get(URL)
と打ち込んで実行します。
driver.get(URL)
試しに私のHPに行ってみましょう。
driver.get('http://www.otupy.net')
URLを打ち込んで、実行するたびにそのサイトにアクセスすることができます。
WEBサイトが全て表示されるまでは少し時間がかかるので、その後の操作をするのは少し待った方が良いでしょう。
サイト内でスクロールする
Javascriptを実行することによってサイト内でスクロールさせることができます。execute_script
にてスクリプトを打ち込むことができます。
ドライバー変数.execute_script(Javascript)
Javascript部分としてはスクリプトを文字として打ち込み
window.scrollBy(0, Y)
やwindow.scrollTo(0, Y)
でスクロール位置を決めます。
window.scrollBy(0, window.innerHeight);
で1ページ分
window.scrollTo(0, document.body.scrollHeight);
を指定すると一番下までスクロールさせられます。
スクロールさせてみましょう。
# 少しだけスクロール
driver.execute_script("window.scrollBy(0, window.innerHeight);")
# 一番下までスクロール
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
これで、ちょろちょろとブラウザをスクロールさせることができます。
要素を探す
サイトの操作を行うには、どこを操作するのか要素を探す必要があります。
入力蘭などのサイト上の要素を探すことができます。
要素を探す方法は多岐に渡り
ドライバー変数.find_element_by_XXXX
というメソッドで各属性の値で探すことができるようになっています。
要素が見つかった場合はWebElement
というデータ型として抽出される形になります。
id属性で検索
ドライバー変数.find_element_by_id(id属性の値)
name属性で検索
ドライバー変数.find_element_by_name(name属性の値)
class名で検索
ドライバー変数.find_element_by_class_name(class名)
tag名
ドライバー変数.find_element_by_tag_name(tag名)
link_textで検索
ドライバー変数.find_element_by_link_text(link_textの値)
CSS_Selector
ドライバー変数.find_element_by_css_selector(css_selectorの値)
xpath
ドライバー変数.find_element_by_xpath(xpathの値)
要素を操作する
要素を操作するには先に要素を見つけておかないといけません。
上記の方法で要素が見つかったら要素変数
に代入しておくと下記のような操作が行えます。
要素変数.find_element_by_XXXX()
要素変数.操作メソッド
要素をクリックする
要素変数.click()
要素に文字を入力する
要素変数.send_keys(文字)
要素でキー入力を行う
先にKeys
ライブラリを読み込みしておきます。
from selenium.webdriver.common.keys import Keys
その後要素を見つけてsend_keys
を用いてキー入力を行います。
要素変数.send_keys(Keys.特殊キー)
扱えるキーは以下の通りです。
キー | Keys |
---|---|
Enterキー | Keys.ENTER |
ALTキー(通常キーと組み合わせ) | Keys.ALT,"キー" |
←キー | Keys.LEFT |
→キー | Keys.RIGHT |
↑キー | Keys.UP |
↓キー | Keys.DOWN |
Ctrlキー(通常キーと組み合わせ) | Keys.CONTROL,"キー" |
Deleteキー | Keys.DELETE |
HOMEキー | Keys.HOME |
ENDキー | Keys.END |
ESCAPEキー | Keys.ESCAPE |
イコール | Keys.EQUALS |
COMMANDキー | Keys.COMMAND |
F1キー | Keys.F1 |
シフトキー(通常キーと組み合わせ) | Keys.SHIFT,"キー" |
ページダウンキー | Keys.PAGE_DOWN |
ページアップキー | Keys.PAGE_UP |
スペースキー | Keys.SPACE |
リターンキー | Keys.RETURN |
タブキー | Keys.TAB |
ページのソースコードを抽出する
文字列としてページのソースコードを取得できます。
ドライバー変数.page_source
driver.page_source
取得後はBeautifulSoup
などのライブラリを用いて解析を行うことができます。
まとめ
seleniumを使うと通常のスクレピング手法では
取得できない情報も簡単に取得できるようになるので便利です。
データが取得できなくて困っている方はseleniumを試してみましょう。
これができるようになると、圧倒的にデータを取得できます。
君がエンジニアになるまであと25日
作者の情報
乙pyのHP:
http://www.otupy.net/
Youtube:
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw
Twitter:
https://twitter.com/otupython
Author And Source
この問題について(100日後にエンジニアになるキミ - 75日目 - プログラミング - スクレイピングについて6), 我々は、より多くの情報をここで見つけました https://qiita.com/otupy/items/a7d32798752eda944061著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .