・この記事の概要
KNIME(ナイム)でPython(パイソン)とSelenium(セレニウム)を使用する方法を解説。
これらのノードを使うことでより本格的なスクレイピングを行うことが可能。
Python(パイソン)のライブラリの1つであるSelenium(セレニウム)を起動し
ブラウザを操作し、XMLを抽出。
KNIME(ナイム)上にデータを出力し、その後KNIME(ナイム)上で処理を行っていく。
そのほかの代表的なノードの一覧はこちら。
KNIME(ナイム)でスクレイピング
どうもシャイン社員です!
気が付くと2022年も1/4を過ぎて4月ですね!
また桜も少しずつ散って今は葉桜の季節になりましたね!
今回はKnimeを使用してスクレイピングをする方法をご紹介したいと思います。
以前の記事でKnimeのWebpage retrieverでもスクレイピングは可能ですが
実際に使用しているブラウザと表示形式が違ったり
Coockieの設定によっては表示できないページがあるため
万能とは言えません。
Knimeでスクレイピング(クローリング)する方法を解説しているページです。まずはWebpage Retrieverの設定方法を主に解説しております。FANTOM-06が発売。スクレイピングやクローリングはやり方を間違えるとサーバーに過度の負荷を与えてしまう場合や、著作権侵害、利用規約違反に反する
そこで今回はPythonのライブラリの1種である「Selenium」を用いて
スクレイピングをする方法をご紹介したいと思います。
スクレイピングをする上での注意点
スクレイピングやクローリングはやり方を間違えるとサーバーに過度の負荷を与えてしまう場合や、著作権侵害、利用規約違反に反する可能性があるので注意が必要です。
スクレイピングやクローリングにより損害が発生した場合でも、当ブログでは責任を一切負いません。
詳細は下記ページに詳しく書いてあるのでご確認ください。
KNIME(ナイム)のSelenium(セレニウム)ノードは有料
こちらのサイトでSeleniumノードがダウンロードできます。
なお有料で299EUR+税なので日本円にして4万円+税をぐらいです。
えーお金かかるんですかー!
と思われたそこのあなた。
私も同じ気持ちです。
なんとか無料でスクレイピングできないか探していたところ
どうやらPythonノード上でSeleniumを動作できれば
無料でKNIMEでスクレイピングをできるようです。
Python(パイソン)ノード上でSelenium(セレニウム)を使う
PythonノードをKnime上で使えるように設定します。
詳しくは下記のページで説明していますのでご覧ください。
今回はKnimeでPythonを利用する方法についてご紹介します!
Knimeではノンコードで行列の計算処理や分析を行うことができます。同様にPythonでもコードを書いて表計算や解析を行うことができます。Pythonノードは初期のKnimeには搭載されていないノードになるため
Seleniumをインストールする
Miniconda(Anaconda)を使用してSeleniumをインストールします。
下記のコマンドを打ち込みENTERキーを押します。
conda install -c conda-forge selenium
途中Proceed([y]/n)?
と聞かれますので「y」を押して続行して、じき完了となります。
Webdriverのインストール
続いてAnaconda(Miniconda)でWebdriverをインストールします。
今回はChromeのWebdriverを使用します。
スクレイピングを実行するPCにChromeをインストールする必要がありますので
あらかじめインストールしておきましょう。
使用しているChromeのバージョンを確認する。
下記のページで自動でweb DriverのバージョンとChromeのバージョンをそろえる方法が記載されています。(2022/8/26追記)
こちらの方法を実施することによりバージョンを手動で合わせる必要がなくなります。
おはこんばんにちは、せなです。今回はSeleniumのChromeバージョンが合わない時の対処法を説明したいと思います。 前置き Seleniumを使用していて動かなくなる原因は...
まずはChromeのバージョンを確認します。
Chromeの右上の点3つのアイコンをクリックし
「ヘルプ」→「Google Chromeについて」の順にクリックします。
私の場合、バージョンは100.0.4896.75でした。
Webdriverのインストール
続いてCondaからダウンロードするWebdriverのバージョンを確認します。
こちらのサイトからCondaでインストールできるwebdriverのバージョンを確認できます。
サイトを確認したところ
100.0.4896.60.0というwebdriverのバージョンが一番現状のChromeのバージョンと
近しいですね。
下記のページで自動でweb DriverのバージョンとChromeのバージョンをそろえる方法が記載されています。(2022/8/26追記)
こちらの方法を実施することによりバージョンを手動で合わせる必要がなくなります。
おはこんばんにちは、せなです。今回はSeleniumのChromeバージョンが合わない時の対処法を説明したいと思います。 前置き Seleniumを使用していて動かなくなる原因は...
Miniconda上でWebdriverをインストールします。
Windowsのスタートから
「Anaconda 3(64bit)」→「Anaconda Powershell Prompt」を選択します。
conda install -c conda-forge python-chromedriver-binary==100.0.4896.60.0
と入力し、Enterを押します。
するとWebdriverのインストールが始まります。
SeleniumをKnimeの環境に追加する。
Knime上でのPython環境にSeleniumを追加します。
KnimeのPython環境を確認する方法は「File」→「Preferences」をクリックします。
デフォルトの設定では
Knime上のPythonで動作するモジュールは限られている状態のため
手動で使用したいライブラリを環境に追加します。
Seleniumを手動で開発環境に追加します。
Windowsのスタートから
「Anaconda 3(64bit)」→「Anaconda Powershell Prompt」を選択します。
コマンドプロントが立ち上がりますので
conda install --name py3_knime selenium
と入力してEnterキーを押します。
Proceed([y]/n)?と聞かれますので
y
と打ってEnterキーを押します。
しばらくした後、doneとでてpy3_knimeにSeleniumを追加することが完了となります。
Seleniumを使ってGoogleの検索結果をスクレイピングする。
それでは実際にSeleniumを使ってGoogleの検索結果をスクレイピングしていきます。
Google検索で「Knimeでひねくれデータ解析」と検索し
検索結果のページ名称を一覧で表示するようにスクレイピングします。
スクレイピングに使用したワークフローはこちらから取得可能です。
#本当はURLもスクレイピングしたかったのですが、難しかったので中断。
#多分lxmlとかBeautifulsoupとか使えばできそう。
下記のようなワークフローを作成しました。
検索ワードの「Knimeでひねくれデータ解析」を入力しています。
#Chrome driveのパスはユーザー名をご自身のPCに合わせて変更してください。
拙いコードで申し訳ないです・・・。
import pandas as pdimport timefrom selenium import webdriverfrom selenium.webdriver.common.keys import Keysbrowser = webdriver.Chrome(executable_path="C:/Users/ユーザー名/miniconda3/Lib/site-packages/chromedriver_binary/chromedriver.exe")#Webdriverの場所を指定Table1 = []URL = pd.DataFrame(data = input_table_1['column1'])KEYWARD = pd.DataFrame(data = input_table_1['column2'])browser.get(URL.iloc[0,0])#URLのサイトを開くtime.sleep(2)#2秒待つelement = browser.find_element_by_name("q")#検索テキストボックスのnameを指定element.send_keys(KEYWARD.iloc[0,0])#検索テキストボックスに検索ワードを入力element.send_keys(Keys.ENTER)#ENTERキーを押す#time.sleep(2)#2秒待つelements1 = browser.find_elements_by_xpath('//div/a/h3')#Xpathを指定しタイトルを取得する。for Stock in elements1:Table1.append(Stock.text)# Copy input to outputoutput_table_1 = pd.DataFrame(data = Table1)browser.close()#ブラウザを閉じる
Python Scriptノードにコードを記入後Executeすると
下記のようにGoogle検索で検索した結果のページ名称一覧が出力されます。
尚抽出したいデータ(文字)を変えたい場合は
elements1 = browser.find_elements_by_xpath('//div/a/h3')
のby_xpath('ほげほげ')のほげほげの部分を抜き出したいデータの表記されているXpathに変更すればOKです。
Xpathの調べ方はChromeのデベロッパーツールを使って調べられます。
詳しくはこちらです。
いかがでしたでしょうか?
Python関係のKnimeノードを最近紹介しておりますが
Pythonの使い方や情報は日本語の解説が多くて助かりますね!
Knimeはまだあまり情報が多くないので
試行錯誤を繰り返しながら私自身も勉強しつつ
皆さんにご紹介できればと思っております!
それでは!
参考サイト様
Pythonコードを作成するにあたり下記のサイト様を参考にさせていただきました。
本サイトはSelenium入門者を対象とした、Seleniumの環境構築・APIの早見表サイトです。テスト自動化ツールであるSeleniumを使ったテスト方法についてご紹介いたします。
0 件のコメント:
コメントを投稿
ここにコメントを書いてね!