web上のサイトからURLの一覧を抜き出し、それぞれのURLにとんでデータを取得する。
sudo apt install python3-pip
pip3 install lxml
pip3 install requests
pip3 install cssselect
code ファイル名.py
python3 ファイル名.py
スクレイピングしたいサイトがJavascriptで構成されているかレンダリングする前のソースを表示して確認する。(≠F12)
ブラウザで ctrl+U
実際のニュースページに書かれている内容が書かれているか文字列を検索する。
検索のやり方 ctrl+F
Javascriptの場合=>具体的な手順(Javascriptあり)へ
Javascriptがないサイトとして、今回は技術評論社の電子書籍サイトを使ってスクレイピングしていく。
このサイトは、本の一覧が表示されていて、気になる本をクリックするとその本の価格と内容が表示されるようになっている。
スクレイピングするのは、すべての本の遷移先URLと本のタイトル、価格、内容である。
スクレイピングするのにあたってのおおまかな手順としては、本の一覧ページからそれぞれの本の遷移先URLをすべて取得する。
そしてそれぞれのURLにアクセスしてその本に関する情報をスクレイピングする、という流れ。

cssselect('#id')
○classを指定するときcssselect('.class')
○idまたはclass内のタグ指定するときcssselect('#id(または.class) (タグ)')
次に、Javascriptを使う場合について説明する。
Javascriptをがある場合、seleniumとphantomJSを追加でインストールする。phantomJSのサポートが終了したのでHeadless Chromeを使う。
pip3 install selenium
wget https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip unzip chromedriver_linux64.zip pip3 install chromedriver


出力結果をテキストとして残したい場合は
python3 (ファイル名).py > (ファイル名).txt
とすることでテキストファイルに実行結果を出力できる。
上のコードの実行結果
技術評論社の電子書籍サイト

また詳細ページなどの文が別れている場合、今回はfor文を使って指定のタグを見つけ次第繋げているが、あらかじめ文のリスト作りjoinという変数を使ってそれらを繋げるという方法もある。以下例。
>>> list = ['a', 'b', 'c']
配列をこのようにつなげたい→ abc
>>> ','.join(a)
'a,b,c'
>>> ','.join(list).replace(',','')
'abc'


node --version

npm --versionこれで、node.jsは使える。
上記のzipを展開し、コマンドプロンプトで展開したディレクトリにて、以下のコマンドで、サーバーが立ち上がる。
node server.js
ここで一度終了しておく。終了するにはCtrl+Cを押す。
まず、スマートフォンとパソコンが同じ回線につながっていることを確認する。
次に、パソコンのコマンドプロンプトにてパソコンのIPアドレスを調べる。
windowsならば以下のコマンドで確認できる。
ipconfig
コマンドを入力し、以下の赤線のIPアドレスを覚えておく。

次に、サンプルプログラムの中のindex.htmlをエディタで開き、赤線で囲んだリンクを先ほどのIPアドレスに変更する。

ここで、またサーバーを立ち上げる。
そして、自分のスマートフォンにて、先ほど変更したリンクに接続すると、加速度が取得できる。
また、パソコンで同じリンクに接続すると、加速度が確認できる。
そのままのプログラムでは、コマンドプロンプトに、スマホの加速度がx軸、y軸、z軸の順に半角スペース1つ分あけて表示される。
であるから、コマンドプロンプトにて、
node server.js > a.txt
もしくは
node server.js > a.csv
などと入力すると、以下のようなテキストファイルが完成する。

これらのファイルを使用してgnuplot等で、グラフ化することもできる。

また、他のセンサーを使いたい場合は、server.jsやindex.htmlを書き換えて使うことができる。今回動作させたのはすべてもともとjava scriptにあるdevicemotionイベントを用いたもののみを使っているが、ほかのWEB上のAPIを用いることでさらにセンサーを増やすことが可能。
追加したセンサー https://ics.media/entry/4095#devicemotion グラフ化 https://github.com/misohena/js_deviceorientation
バイブレーション https://davidwalsh.name/vibration-api 追加
GPSセンサー http接続からの取得が禁止されていた https://www.atmarkit.co.jp/ait/articles/1605/13/news038.html
照度センサー 近接センサー このAPIはブラウザによって無効化された https://www.fxsitecompat.com/ja/docs/2018/ambient-light-and-proximity-sensor-apis-have-been-disabled/
ジャイロセンサー(傾き)もとからあった ジャイロセンサー(方角)方角を追加
加速度センサー(慣性)重力を含む加速度の追加
重力なし加速度や回転速度は、追加したものと似ているため追加していない
server.jsでコマンドプロンプトに表示させるallとgallを並べて表示させたかったが、devicemotionイベントは常に値を とり続けるのに対してdeviceorientationイベントは値が変化したら実行されるからそれぞれの値を並べて表示できていない
サーバー側でコンパスの値は取得しているのに、コンパスの向きがPC側だと変化しない グラフも同様で値の通信はできているのに、PC側だと変化しない
通信の流れ http://jxck.hatenablog.com/entry/20110730/1312042603
