【AWS】【機械学習】Deep Learning AMI(Ubuntu)で【形態素解析】を試した(Webサイトの単語解析)【Part.5】

現在 Part.5 まで来ましたが、まだまだゴールは見えず、続いていくと思います。

今回から Web サイトの形態素解析を試してみたい思います。

 

以下、今までの記事一覧です。

 

【AWS】【機械学習】Deep Learning AMI(Ubuntu)で【形態素解析】を試した【Part.1】

 

【AWS】【機械学習】Deep Learning AMI(Ubuntu)で【形態素解析】を試した【Part.2】

 

【AWS】【機械学習】Deep Learning AMI(Ubuntu)で【形態素解析】を試した(Janomeのインストール)【Part.3】

 

【AWS】【機械学習】Deep Learning AMI(Ubuntu)で【形態素解析】を試した(Janome&mecab-ipadic-neologd で解析)【Part.4】

 

【AWS】【機械学習】Deep Learning AMI(Ubuntu)で【形態素解析】を試した(Janome&mecab-ipadic-neologd で解析)【Part.5】

 

 

 

Webサイトの単語解析を試してみる

各 Web サイトで使われている単語を収集するプログラムを試してみました。

 

設計

イメージとしてはこんな感じで考えています。

  1. URLを入力
  2. 対象のサイトをスクレイピング
  3. 固有名詞を抽出して上位よりランキング形式で表示する

 

 

スクレイピングプログラムの例

以下、以前解説したスクレイピングプログラムの例です。

 

【Python】Python 3.6 & Selenium WebDriver & headless でスクレイピング【Part.1】

Python 3.6 & Selenium WebDriver & Headless(PhantomJS)で Web サイトをスクレイピングするプログラムを作成しています。

 

【Python】Python 3.6 & Selenium WebDriver & headless でスクレイピング【Part.2】

Python 3.6 & Selenium WebDriver & Headless(PhantomJS)で Web サイトをスクレイピングするプログラムを作成するパート2です。ユーザーエージェントの設定をしています。

 

【Python】Python 3.6 & Selenium WebDriver & headless でスクレイピング【Part.3】

Python 3.6 & Selenium WebDriver & Headless(PhantomJS)で Web サイトをスクレイピングするプログラムを作成するパート3です。Selenium だけでなく BeautifulSoup でもユーザーエージェントの設定方法を解説しています。

 

【Python】Python 3.6 & Selenium WebDriver & PhantomJS でスクレイピング(find系操作)【Part.4】

Python 3.6 & Selenium WebDriver & Headless(PhantomJS)で Web サイトをスクレイピングするプログラムを作成するパート4です。find_element 系の詳しい解説をしています。

 

【Python】Python 3.6 & Selenium WebDriver & PhantomJS でスクレイピング(URLを引数で受け取る)【Part.5】

Python 3.6 & Selenium WebDriver & PhantomJS で Web サイトをスクレイピングするプログラムを作成するパート5です。URL をコマンド引数として受け取るプログラムについて解説しています。

 

【Python】Python 3.6 & Selenium WebDriver & PhantomJS でスクレイピング(ファイルを読み込み文字列を抽出する)【Part.6】

Python 3.6 & Selenium WebDriver & PhantomJS で Web サイトをスクレイピングするプログラムを作成するパート6です。ファイルに吐かれたWebサイトのソースコードを抽出する方法について調べました。

 

 

スクレイピングをしてサイトの内容をファイルに保存する

スクレイピングというと難しいイメージがあるかもしれませんが、アイデア次第では簡単に必要な情報を取得することができます。

プログラムが目的ではなく情報を取得することを目的と考えるなら、手段の選択肢はたくさんあるかもしれません。

例えば wget コマンドでも簡単に記事のスクレイピングが可能です。

ubuntu@AWS_TEST: ~] wget https://news.yahoo.co.jp/byline/hasegawamasako/20180121-00080676/ ← 適当な記事の URL を指定して wget コマンドを実行
--2018-01-21 05:38:46--  https://news.yahoo.co.jp/byline/hasegawamasako/20180121-00080676/
Resolving news.yahoo.co.jp (news.yahoo.co.jp)... 183.79.250.123
Connecting to news.yahoo.co.jp (news.yahoo.co.jp)|183.79.250.123|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html.1’

index.html.1                  [ <=>                                  ]  54.21K  --.-KB/s    in 0.03s

2018-01-21 05:38:46 (1.93 MB/s) - ‘index.html.1’ saved [55508]

ubuntu@AWS_TEST: ~] cat index.html.1 ← cat コマンドで表示 

<html lang="ja" xmlns:og="http://ogp.me/ns#" xmlns:fb="http://ogp.me/ns/fb#">

<meta charset="utf-8">
荻野目洋子、「ダンシング・ヒーロー」再ブレイクは奇跡!(長谷川まさ子) - 個人 - Yahoo!ニュース
<meta name="description" content="80年代のバブル絶頂期にヒットした「ダンシング・ヒーロー」が、お笑いタレント・平野ノラや大阪・登美丘高校が使用したことで、再ブレイクした荻野目洋子さん(49)。今の心境を自然体で語ってくれました!">
<meta name="keywords" content="長谷川まさ子,ハセガワマサコ,フリーアナウンサー/芸能リポーター,エンターテ インメント,エンタメ総合">

 

 

 

環境の確認

初めに環境を確認します。

環境は AWS の t2.medium で OS は Ubuntu を利用しています。

 

  • OS : Ubuntu 16.04.3 LTS
  • カーネル : 4.4.0-1048-aws
  • vCPU : 2コア
  • メモリ : 4GiB
  • ディスクサイズ : 30GB

 

ubuntu@AWS_TEST: ~/dl] cat /etc/ec2_version
Ubuntu 16.04.3 LTS (Xenial Xerus)
ubuntu@AWS_TEST: ~/dl] df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            2.0G     0  2.0G   0% /dev
tmpfs           396M  5.6M  390M   2% /run
/dev/xvda1       30G  9.1G   20G  32% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
tmpfs           396M     0  396M   0% /run/user/1000
ubuntu@AWS_TEST: ~/dl]

 

 

 

Python 用 Selenium WebDriver のインストール

環境を構築します。

初めに Selenium WebDriver をインストールします。

ubuntu@AWS_TEST: ~] pip3.6 install selenium
Collecting selenium
  Downloading selenium-3.8.1-py2.py3-none-any.whl (942kB)
    100% |????????????????????????????????| 952kB 1.6MB/s
Installing collected packages: selenium
Successfully installed selenium-3.8.1
ubuntu@AWS_TEST: ~]

 

 

PhantomJSとは?

次に PhantomJS をインストールします。

PhantomJS は、JavaScript API を実装したヘッドレス WebKit スクリプトです。

DOM 処理、CSS セレクタ、JSON、Canvas、SVG など、さまざまな Web サイトに対して利用できます。

 

PhantomJS の主な使用例の1つは、Web アプリケーションのヘッドレステストです。

(つまり実際に画面上にブラウザを立ち上げてそのブラウザを操作する必要もなく、メモリ上でボタンをクリックしたり、ページを移動したりできます)

 

他の使用方法としては会員サイトの自動ログインやWebサイトの定例操作など、アイデア次第で様々なことが可能です。

 

 

PhantomJS は npm コマンドでインストールするので npm コマンドをインストールする

PhantomJS をインストールする前に npm コマンドをインストールします。

ubuntu@AWS_TEST: ~] npm ← npmコマンドで既にインストールされているかチェック。インストールされていませんでした。
The program 'npm' is currently not installed. You can install it by typing:
sudo apt install npm
ubuntu@AWS_TEST: ~] sudo apt install npm ← aptコマンドで npm をインストールします。
Reading package lists... Done
Building dependency tree
Reading state information... Done

 

~ 省略 ~

 

Setting up npm (3.5.2-0ubuntu4) ...
Processing triggers for libc-bin (2.23-0ubuntu10) ...
ubuntu@AWS_TEST: ~]

 

npm とは何か?

npm コマンドは Node.js のパッケージを管理するコマンド(管理ツール)です。

npm は「Node Packaged Modules」の略です。

 

 

nodejs-legacy がインストールされていない場合はインストールする

次に「nodejs-legacy」パッケージをインストールします。

ubuntu@AWS_TEST: ~] sudo apt-get install nodejs-legacy
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  nodejs-legacy
0 upgraded, 1 newly installed, 0 to remove and 13 not upgraded.
Need to get 27.7 kB of archives.
After this operation, 81.9 kB of additional disk space will be used.
Get:1 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 nodejs-legacy all 4.2.6~dfsg-1ubuntu4.1 [27.7 kB]
Fetched 27.7 kB in 0s (56.8 kB/s)
Selecting previously unselected package nodejs-legacy.
(Reading database ... 89150 files and directories currently installed.)
Preparing to unpack .../nodejs-legacy_4.2.6~dfsg-1ubuntu4.1_all.deb ...
Unpacking nodejs-legacy (4.2.6~dfsg-1ubuntu4.1) ...
Processing triggers for man-db (2.7.5-1) ...
Setting up nodejs-legacy (4.2.6~dfsg-1ubuntu4.1) ...
ubuntu@AWS_TEST: ~]

 

 

PhantomJS をインストールする

「npm コマンド」「nodejs-legacy」をインストールしたら PhantomJS をインストールします。

ubuntu@AWS_TEST: ~] npm -g install phantomjs
npm WARN deprecated phantomjs@2.1.7: Package renamed to phantomjs-prebuilt. Please update 'phantomjs' package references to 'phantomjs-prebuilt'
npm WARN deprecated node-uuid@1.4.8: Use uuid module instead
npm WARN deprecated tough-cookie@2.2.2: ReDoS vulnerability parsing Set-Cookie https://nodesecurity.io/advisories/130
/usr/local/bin/phantomjs -> /usr/local/lib/node_modules/phantomjs/bin/phantomjs

> phantomjs@2.1.7 install /usr/local/lib/node_modules/phantomjs
> node install.js

Considering PhantomJS found at /usr/local/bin/phantomjs
Looks like an `npm install -g`
Error checking path, continuing { [Error: Cannot find module '/usr/local/lib/node_modules/phantomjs/lib/location'] code: 'MODULE_NOT_FOUND' }
Downloading https://github.com/Medium/phantomjs/releases/download/v2.1.1//phantomjs-2.1.1-linux-x86_64.tar.bz2
Saving to /tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2
Receiving...
  [===================================-----] 88%
Received 22866K total.
Extracting tar contents (via spawned process)
Removing /usr/local/lib/node_modules/phantomjs/lib/phantom
Copying extracted folder /tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2-extract-1516516076473/phantomjs-2.1.1-linux-x86_64 -> /usr/local/lib/node_modules/phantomjs/lib/phantom
Writing location.js file
Done. Phantomjs binary available at /usr/local/lib/node_modules/phantomjs/lib/phantom/bin/phantomjs
/usr/local/lib
mqw phantomjs@2.1.7
  tqw extract-zip@1.5.0
  x tqw concat-stream@1.5.0
  x x tqq inherits@2.0.3
  x x tqw readable-stream@2.0.6
  x x x tqq core-util-is@1.0.2
  x x x tqq isarray@1.0.0
  x x x tqq process-nextick-args@1.0.7
  x x x tqq string_decoder@0.10.31
  x x x mqq util-deprecate@1.0.2
  x x mqq typedarray@0.0.6
  x tqq debug@0.7.4
  x tqw mkdirp@0.5.0
  x x mqq minimist@0.0.8
  x mqw yauzl@2.4.1
  x   mqw fd-slicer@1.0.1
  x     mqq pend@1.2.0
  tqw fs-extra@0.26.7
  x tqq graceful-fs@4.1.11
  x tqq jsonfile@2.4.0
  x tqq klaw@1.3.1
  x tqq path-is-absolute@1.0.1
  x mqw rimraf@2.6.2
  x   mqw glob@7.1.2
  x     tqq fs.realpath@1.0.0
  x     tqw inflight@1.0.6
  x     x mqq wrappy@1.0.2
  x     tqw minimatch@3.0.4
  x     x mqw brace-expansion@1.1.8
  x     x   tqq balanced-match@1.0.0
  x     x   mqq concat-map@0.0.1
  x     mqq once@1.4.0
  tqw hasha@2.2.0
  x tqq is-stream@1.1.0
  x mqw pinkie-promise@2.0.1
  x   mqq pinkie@2.0.4
  tqq kew@0.7.0
  tqq progress@1.1.8
  tqw request@2.67.0
  x tqq aws-sign2@0.6.0
  x tqq bl@1.0.3
  x tqq caseless@0.11.0
  x tqw combined-stream@1.0.5
  x x mqq delayed-stream@1.0.0
  x tqq extend@3.0.1
  x tqq forever-agent@0.6.1
  x tqw form-data@1.0.1
  x x mqw async@2.6.0
  x x   mqq lodash@4.17.4
  x tqw har-validator@2.0.6
  x x tqw chalk@1.1.3
  x x x tqq ansi-styles@2.2.1
  x x x tqq escape-string-regexp@1.0.5
  x x x tqw has-ansi@2.0.0
  x x x x mqq ansi-regex@2.1.1
  x x x tqq strip-ansi@3.0.1
  x x x mqq supports-color@2.0.0
  x x tqq commander@2.13.0
  x x mqw is-my-json-valid@2.17.1
  x x   tqq generate-function@2.0.0
  x x   tqw generate-object-property@1.2.0
  x x   x mqq is-property@1.0.2
  x x   tqq jsonpointer@4.0.1
  x x   mqq xtend@4.0.1
  x tqw hawk@3.1.3
  x x tqq boom@2.10.1
  x x tqq cryptiles@2.0.5
  x x tqq hoek@2.16.3
  x x mqq sntp@1.0.9
  x tqw http-signature@1.1.1
  x x tqq assert-plus@0.2.0
  x x tqw jsprim@1.4.1
  x x x tqq assert-plus@1.0.0
  x x x tqq extsprintf@1.3.0
  x x x tqq json-schema@0.2.3
  x x x mqw verror@1.10.0
  x x x   mqq assert-plus@1.0.0
  x x mqw sshpk@1.13.1
  x x   tqq asn1@0.2.3
  x x   tqq assert-plus@1.0.0
  x x   tqq bcrypt-pbkdf@1.0.1
  x x   tqw dashdash@1.14.1
  x x   x mqq assert-plus@1.0.0
  x x   tqq ecc-jsbn@0.1.1
  x x   tqw getpass@0.1.7
  x x   x mqq assert-plus@1.0.0
  x x   tqq jsbn@0.1.1
  x x   mqq tweetnacl@0.14.5
  x tqq is-typedarray@1.0.0
  x tqq isstream@0.1.2
  x tqq json-stringify-safe@5.0.1
  x tqw mime-types@2.1.17
  x x mqq mime-db@1.30.0
  x tqq node-uuid@1.4.8
  x tqq oauth-sign@0.8.2
  x tqq qs@5.2.1
  x tqq stringstream@0.0.5
  x tqq tough-cookie@2.2.2
  x mqq tunnel-agent@0.4.3
  tqw request-progress@2.0.1
  x mqq throttleit@1.0.0
  mqw which@1.2.14
    mqq isexe@2.0.0

ubuntu@AWS_TEST: ~]

 

fontconfig をインストールする

次に fontconfig をインストールします。

ubuntu@AWS_TEST: ~/dl] sudo apt-get install fontconfig

 

正常にインストールされたことを確認します。

ubuntu@AWS_TEST: /bin] phantomjs --version
2.1.1
ubuntu@AWS_TEST: /bin]

 

※fontconfig がインストールされていないと上記コマンドがエラーになります。

ubuntu@AWS_TEST: /bin] phantomjs --version
/usr/local/lib/node_modules/phantomjs/lib/phantom/bin/phantomjs: error while loading shared libraries: libfontconfig.so.1: cannot open shared object file: No such file or directory
ubuntu@AWS_TEST: /bin]

 

上記のように「libfontconfig」ライブラリが見つからなくてエラーになっています。

 

  • libfontconfig ← generic font configuration library(一般的なフォント設定のライブラリ)

 

Fontconfig とは?

Fontconfig は、フォントアクセスを設定およびカスタマイズするためのライブラリです。

  • 新しいフォントを発見し、共通の構成問題の原因を取り除く
  • フォント名が不足している場合は、適切な代替フォントを選択できるように、フォント名の置換を実行する
  • 一連の言語を完全にカバーするために必要なフォントのセットを特定する
  • 何千ものフォントをインストールしていても、メモリ使用量を最小限に抑えながら、インストールしたフォントセットの中から必要なフォントを効率的かつ迅速に見つけることができる
  • フォント自体をレンダリングします

 

 

 

テスト用プログラムを実行する

環境が整ったらテスト用プログラムを実行します。

 

【プログラム例】

ubuntu@AWS_TEST: ~/dl] cat scrape2.py
# coding:utf-8
from selenium import webdriver
import time

driver = webdriver.PhantomJS(executable_path='/usr/local/bin/phantomjs')
driver.get('http://pythonscraping.com/pages/javascript/ajaxDemo.html')

time.sleep(3)
print(driver.find_element_by_id('content').text)

driver.close()

ubuntu@AWS_TEST: ~/dl]

 

 

【プログラム実行結果】

ubuntu@AWS_TEST: ~/dl] python3.6 scrape2.py
/usr/local/lib/python3.6/dist-packages/selenium/webdriver/phantomjs/webdriver.py:49: UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
  warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '
Here is some important text you want to retrieve!
A button to click!
ubuntu@AWS_TEST: ~/dl]

 

プログラムは問題なく実行されたのですが以下のメッセージが気になります。

「/usr/local/lib/python3.6/dist-packages/selenium/webdriver/phantomjs/webdriver.py:49: UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
  warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '
Here is some important text you want to retrieve!」

 

↓ 日本語に翻訳

 

「/usr/local/lib/python3.6/dist-packages/selenium/webdriver/phantomjs/webdriver.py:49:UserWarning:PhantomJSのSeleniumサポートは廃止されました。

代わりに、Chromeの代わりにヘッドレスバージョンを使用してください。

warnings.warn( 'PhantomJSのセレンのサポートは廃止されました。ヘッドレスを使用してください'

ここにあなたが検索したいいくつかの重要なテキストです!」

 

 

コマンドラインから URL を読み込みスクレイピングするプログラム

以下、コマンドラインからスクレイピングをしたい URL を読み込んで、ソースを出力するプログラムです。

【プログラム例】

# coding:utf-8
from selenium import webdriver

# dcapで必要
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

 

# sleepで必要
import time

# argv を取得するために sys をインポートする
import sys

# コマンドライン引数を取り込み args に格納する
args = sys.argv

# 引数のチェック リストの数を数える
arg_count = len(args)
# リストの数をチェックする
if arg_count !=2:
    print('\n')
    print('使用方法:python [プログラム.py] [URL]')
    print('引数にURL(https://yahoo.co.jpなど)が必要です。')
    print('\n')
    # プログラムを終了する
    quit()

# コマンドライン引数の2番目を取得して page_url 変数に格納します。
page_url = args[1]
print('URLは ' + page_url + ' です。')

# ----------------------------------------------------
# URL を基に Selenium Webdriver でソースを取得して出力する
# ----------------------------------------------------

dcap = dict(DesiredCapabilities.PHANTOMJS)

# ユーザーエージェント
dcap["phantomjs.page.settings.userAgent"] = ("Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1")

driver = webdriver.PhantomJS(desired_capabilities=dcap, executable_path='/usr/local/bin/phantomjs')
driver.get(page_url)

time.sleep(10)

# ページのソースを吐き出すファイルをオープンする
#tmpf = codecs.open('/tmp/tmp_page_source.txt','w', 'utf-8')

page_source = driver.page_source

# ソースを出力する
print(page_source)

driver.close()

 

 

【プログラム実行結果】

ubuntu@AWS_TEST: ~/dl] python3.6 scrape2.py https://www.yahoo.co.jp
URLは https://www.yahoo.co.jp です。
/usr/local/lib/python3.6/dist-packages/selenium/webdriver/phantomjs/webdriver.py:49: UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
  warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '
<html lang="ja" class="is-iOS is-gteIOS7 is-iOS9 is-vtestIdMtop128">

  <meta charset="utf-8">
  Yahoo! JAPAN
  <meta name="description" content="日本最大級のポータルサイト。検索、オークション、ニュース、天気、スポーツ、メール、ショッピングなど多数のサービスを展開。あなたの生活をより豊かにする「課題解決エンジン」を目指していきます。">
  <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0">
  <meta name="google-site-verification" content="fsLMOiigp5fIpCDMEVodQnQC7jIY1K3UXW5QkQcBmVs">
  <link rel="apple-touch-icon-precomposed" href="https://s.yimg.jp/c/icon/s/bsc/2.0/y120.png">
  <link rel="canonical" href="https://www.yahoo.co.jp/">
    <link rel="stylesheet" href="https://s.yimg.jp/images/mtop/5.3.5/styles/top.css">
      

      <link rel="dns-prefetch" href="//approach.yahooapis.jp">

 

~ 省略 ~

 

</script><noscript>&lt;div style="position:absolute;"&gt;&lt;img width=1 height=1 alt="" src="https://b4.yahoo.co.jp/b?P=0jyN0zE4My6d6ubEWmRiCADFMTMuMQAAAAA41.DN&amp;T=1amh8m9tj%2fX%3d1516528136%2fE%3d2080490205%2fR%3djp_s_t_web%2fK%3d5%2fV%3d3.1%2fW%3dJ%2fY%3djp%2fF%3d1606932592%2fH%3dc2VjdXJlPXRydWUgc3RyZWFtPTEgYWRjdmVyPTYuOC4wIGRldmljZS1tb2RlbD0iaVBob25lLzkuMCIgZGV2aWNlLW9zLXZlcnNpb249ImlPUyA5LjEiIGRldmljZS1jYXJyaWVyLWF2YWlsYWJsZT0ia2RkaTtzb2Z0YmFuaztkb2NvbW8iIG5vdGh0bWwtcG9zPVNUVyxTVEIx%2fQ%3d-1%2fS%3d1%2fJ%3dA0D8537C"&gt;&lt;/div&gt;</noscript><iframe src="https://s.yimg.jp/images/listing/tool/yads/criteo_api.html#%7B%22command%22%3A%22callAds%22%2C%22params%22%3A%7B%22zoneid%22%3A%22265876%22%7D%7D" width="0" height="0" name="265876-8474694501" id="265876-8474694501" style="display: none;"></iframe></body></html>
ubuntu@AWS_TEST: ~/dl]

 

 

ubuntuで開発をすると捗ることが分かった

完全に好みの世界になりますが、ubuntu で vi コマンドで Python プログラムを作成していますが、配色が非常に分かりやすくて開発が捗ることが分かりました。

 

 

 

エラー特集

実際にプログラムを動かすようになるまでにエラーになった様々な状況と対処方法を記載します。

ubuntu への PhantomJS インストールでエラーが出力された場合

ubuntu@AWS_TEST: ~] npm -g install phantomjs
npm WARN deprecated phantomjs@2.1.7: Package renamed to phantomjs-prebuilt. Please update 'phantomjs' package references to 'phantomjs-prebuilt'
npm WARN deprecated node-uuid@1.4.8: Use uuid module instead
npm WARN deprecated tough-cookie@2.2.2: ReDoS vulnerability parsing Set-Cookie https://nodesecurity.io/advisories/130
/usr/local/bin/phantomjs -> /usr/local/lib/node_modules/phantomjs/bin/phantomjs

> phantomjs@2.1.7 install /usr/local/lib/node_modules/phantomjs
> node install.js

sh: 1: node: not found
npm ERR! Linux 4.4.0-1048-aws
npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "-g" "install" "phantomjs"
npm ERR! node v4.2.6
npm ERR! npm  v3.5.2
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn

npm ERR! phantomjs@2.1.7 install: `node install.js`
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the phantomjs@2.1.7 install script 'node install.js'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the phantomjs package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node install.js
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs phantomjs
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls phantomjs
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/ubuntu/npm-debug.log
ubuntu@AWS_TEST: ~]

 

 

 

■対処方法 nodejs-legacy をインストールする

nodejs-legacyをインストールすることでnpm」コマンドで「phantomjsをインストールできるようになります。

ubuntu@AWS_TEST: ~] sudo apt-get install nodejs-legacy
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  nodejs-legacy
0 upgraded, 1 newly installed, 0 to remove and 13 not upgraded.
Need to get 27.7 kB of archives.
After this operation, 81.9 kB of additional disk space will be used.
Get:1 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 nodejs-legacy all 4.2.6~dfsg-1ubuntu4.1 [27.7 kB]
Fetched 27.7 kB in 0s (56.8 kB/s)
Selecting previously unselected package nodejs-legacy.
(Reading database ... 89150 files and directories currently installed.)
Preparing to unpack .../nodejs-legacy_4.2.6~dfsg-1ubuntu4.1_all.deb ...
Unpacking nodejs-legacy (4.2.6~dfsg-1ubuntu4.1) ...
Processing triggers for man-db (2.7.5-1) ...
Setting up nodejs-legacy (4.2.6~dfsg-1ubuntu4.1) ...
ubuntu@AWS_TEST: ~]

 

なぜ nodejs-legacy が必要なのか?

2012年、Debian は Node.js 実行ファイルの名前を変更して、別のパッケージと名前がバッティングしないようにしました。

その際にパスが変わったので、不具合が起きないように nodejs-legacy パッケージを提供しました。

深いところまでは不明ですが、要するに nodejs-legacy パッケージをインストールすることで node.js が利用できるようになったというころでしょうか。

 

 

phantomjs unexpectedly exited. Status code was: 127 が出力された場合

以下のように「phantomjs unexpectedly exited. Status code was: 127」エラーが出力された場合です。

ubuntu@AWS_TEST: ~/dl] python3.6 scrape2.py
/usr/local/lib/python3.6/dist-packages/selenium/webdriver/phantomjs/webdriver.py:49: UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
  warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '
Traceback (most recent call last):
  File "scrape2.py", line 5, in 
    driver = webdriver.PhantomJS(executable_path='/usr/local/bin/phantomjs')
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/phantomjs/webdriver.py", line 56, in __init__
    self.service.start()
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/common/service.py", line 98, in start
    self.assert_process_still_running()
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/common/service.py", line 111, in assert_process_still_running
    % (self.path, return_code)
selenium.common.exceptions.WebDriverException: Message: Service /usr/local/bin/phantomjs unexpectedly exited. Status code was: 127

Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
  File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in 
    from apport.report import Report
  File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in 
    import apport.fileutils
  File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in 
    from apport.packaging_impl import impl as packaging
  File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 23, in 
    import apt
  File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in 
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'

Original exception was:
Traceback (most recent call last):
  File "scrape2.py", line 5, in 
    driver = webdriver.PhantomJS(executable_path='/usr/local/bin/phantomjs')
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/phantomjs/webdriver.py", line 56, in __init__
    self.service.start()
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/common/service.py", line 98, in start
    self.assert_process_still_running()
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/common/service.py", line 111, in assert_process_still_running
    % (self.path, return_code)
selenium.common.exceptions.WebDriverException: Message: Service /usr/local/bin/phantomjs unexpectedly exited. Status code was: 127

ubuntu@AWS_TEST: ~/dl]

 

 

■対処方法 fontconfig をインストールする

上記エラーの対処方法ですが、「fontconfig」パッケージがインストールされていないことが原因です。

ubuntu@AWS_TEST: ~/dl] sudo apt-get install fontconfig

 

以下のサイトを参考にしました。

https://qiita.com/nico2525_ki_ra/items/b71748a959ebea354618

 

 

参考にした書籍

現在以下の書籍で機械学習のさわり部分を勉強しています。

まだまだ学ぶべき部分は多いですが、「Pythonによるスクレイピング&機械学習 開発テクニック」は機械学習のための様々なライブラリを分かりやすく解説しています。

専門的な部分まで取り扱っていませんが、機械学習初心者にとって、本書は入り口としては最適だと思います。

いきなり難しい専門書を読んでもすぐに挫折すると思うので、最初にこの本を読んでおくのがいいと思います。

Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう

 

今までの記事

【AWS】【機械学習】Deep Learning AMI(Ubuntu)で【形態素解析】を試した【Part.1】

 

【AWS】【機械学習】Deep Learning AMI(Ubuntu)で【形態素解析】を試した【Part.2】

 

【AWS】【機械学習】Deep Learning AMI(Ubuntu)で【形態素解析】を試した(Janomeのインストール)【Part.3】

 

【AWS】【機械学習】Deep Learning AMI(Ubuntu)で【形態素解析】を試した(Janome&mecab-ipadic-neologd で解析)【Part.4】

 

【AWS】【機械学習】Deep Learning AMI(Ubuntu)で【形態素解析】を試した(Janome&mecab-ipadic-neologd で解析)【Part.5】

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人

コメントを残す

メールアドレスが公開されることはありません。