oneshotlife-pythonのブログ

Pythonを好んで使っているプログラマです。Pythonこそが最強のプログラミング言語だと思っています。Pythonは使いやすいです。Pythonは書きやすいです。Pythonは読みやすいです。Pythonはパワフルです。Pythonは一貫性があります。Pythonが好きです。

LinuxMint18.2SonyaにAnacondaをインストールしてみた

以前WindowsにAnacondaを入れたときは、動きが残念な感じだったので、今度はLinuxMint18.2に入れてみました。

ダウンロードページから、パッケージをダウンロード。

https://www.anaconda.com/download/

2.x系と3.x系とありますが、長い目で見たら3.x系のほうが良いと思いそちらをチョイス。というか、もはや2.x系を選ぶメリットは無いのでは?企業で仕方なく使っているとか、お気に入りのライブラリが2.x系にしか対応していないとかなどあれば仕方ないけど。

ダウンロードフォルダに移動。

$cd ~/ダウンロード
$ls
Anaconda3-5.0.1-Linux-x86_64.sh

フォルダ名が日本語だとめんどい。。。あとでリンク貼ろうっと。

実行

$bash Anaconda3-5.0.1-Linux-x86_64.sh 

Welcome to Anaconda3 5.0.1

In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>> 
===================================
Anaconda End User License Agreement
===================================

Copyright 2015, Anaconda, Inc.

All rights reserved under the 3-clause BSD License:

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  * Neither the name of Continuum Analytics, Inc. (dba Anaconda, Inc.) ("Continuum") nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
                                                                                                                                                                                                                                             
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIM
ED. IN NO EVENT SHALL CONTINUUM BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR B
USINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILIT
Y OF SUCH DAMAGE.                                                                                                                                                                                                                            
                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                             
Notice of Third Party Software Licenses                                                                                                                                                                                                      
=======================================                                                                                                                                                                                                      
                                                                                                                                                                                                                                             
Anaconda contains open source software packages from third parties. These are available on an "as is" basis and subject to their individual license agreements. These licenses are available in Anaconda or at https://docs.anaconda.com/anac
onda/packages/pkg-docs . Any binary packages of these third party tools you obtain via Anaconda are subject to their individual licenses as well as the Anaconda license. Continuum reserves the right to change which third party tools are 
provided in Anaconda.                                                                                                                                                                                                                        
                                                                                                                                                                                                                                             
In particular, Anaconda contains re-distributable, run-time, shared-library files from the Intel(TM) Math Kernel Library ("MKL binaries"). You are specifically authorized to use the MKL binaries with your installation of Anaconda. You ar
e also authorized to redistribute the MKL binaries with Anaconda or in the conda package that contains them. Use and redistribution of the MKL binaries are subject to the licensing terms located at https://software.intel.com/en-us/licens
e/intel-simplified-software-license. If needed, instructions for removing the MKL binaries after installation of Anaconda are available at http://www.anaconda.com.                                                                          
                                                                                                                                                                                                                                             
Anaconda also contains cuDNN software binaries from NVIDIA Corporation ("cuDNN binaries"). You are specifically authorized to use the cuDNN binaries with your installation of Anaconda. You are also authorized to redistribute the cuDNN bi
naries with an Anaconda package that contains them. If needed, instructions for removing the cuDNN binaries after installation of Anaconda are available at http://www.anaconda.com.                                                         
                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                             
Cryptography Notice                                                                                                                                                                                                                          
===================

This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption s
oftware, please check your country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See the Wassenaar Arrangement <http://www.wassenaar.org/> f
or more information.

Continuum has self-classified this software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of 
this distribution makes it eligible for export under the License Exception ENC Technology Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for both object code and source code. In addi
tion, the Intel(TM) Math Kernel Library contained in Continuum's software is classified by Intel(TM) as ECCN 5D992b with no license required for export to non-embargoed countries.

The following packages are included in this distribution that relate to cryptography:

openssl
    The OpenSSL Project is a collaborative effort to develop a robust, commercial-grade, full-featured, and Open Source toolkit implementing the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols as well as a full-st
rength general purpose cryptography library.

pycrypto
    A collection of both secure hash functions (such as SHA256 and RIPEMD160), and various encryption algorithms (AES, DES, RSA, ElGamal, etc.).

pyopenssl
    A thin Python wrapper around (a subset of) the OpenSSL library.

kerberos (krb5, non-Windows platforms)
    A network authentication protocol designed to provide strong authentication for client/server applications by using secret-key cryptography.

cryptography
    A Python library which exposes cryptographic recipes and primitives.

規約に同意

yesとタイプ

Do you accept the license terms? [yes|no]
[no] >>> 
Please answer 'yes' or 'no':'
>>> yes

インストールパスを設定

僕はデフォルトのままなのでそのままエンター

Anaconda3 will now be installed into this location:
/home/tom/anaconda3

  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below

インストールはじまったよ〜

[/home/tom/anaconda3] >>> 
PREFIX=/home/tom/anaconda3
installing: python-3.6.3-hc9025b9_1 ...
Python 3.6.3 :: Anaconda, Inc.
installing: ca-certificates-2017.08.26-h1d4fec5_0 ...
installing: conda-env-2.6.0-h36134e3_1 ...
installing: intel-openmp-2018.0.0-h15fc484_7 ...
installing: libgcc-ng-7.2.0-h7cc24e2_2 ...
installing: libgfortran-ng-7.2.0-h9f7466a_2 ...
installing: libstdcxx-ng-7.2.0-h7a57d05_2 ...
installing: bzip2-1.0.6-h0376d23_1 ...
installing: expat-2.2.4-hc00ebd1_1 ...
installing: gmp-6.1.2-hb3b607b_0 ...
installing: graphite2-1.3.10-hc526e54_0 ...
installing: icu-58.2-h211956c_0 ...
installing: jbig-2.1-hdba287a_0 ...
installing: jpeg-9b-habf39ab_1 ...
installing: libffi-3.2.1-h4deb6c0_3 ...
installing: libsodium-1.0.13-h31c71d8_2 ...
installing: libssh2-1.8.0-h8c220ad_2 ...
installing: libtool-2.4.6-hd50d1a6_0 ...
installing: libxcb-1.12-h84ff03f_3 ...
installing: lzo-2.10-h1bfc0ba_1 ...
installing: mkl-2018.0.0-hb491cac_4 ...
installing: ncurses-6.0-h06874d7_1 ...
installing: openssl-1.0.2l-h077ae2c_5 ...
installing: patchelf-0.9-hf79760b_2 ...
installing: pcre-8.41-hc71a17e_0 ...
installing: pixman-0.34.0-h83dc358_2 ...
installing: tk-8.6.7-h5979e9b_1 ...
installing: unixodbc-2.3.4-hc36303a_1 ...
installing: xz-5.2.3-h2bcbf08_1 ...
installing: yaml-0.1.7-h96e3832_1 ...
installing: zlib-1.2.11-hfbfcf68_1 ...
installing: curl-7.55.1-hcb0b314_2 ...
installing: glib-2.53.6-hc861d11_1 ...
installing: hdf5-1.10.1-hb0523eb_0 ...
installing: libedit-3.1-heed3624_0 ...
installing: libpng-1.6.32-hda9c8bc_2 ...
installing: libtiff-4.0.8-h90200ff_9 ...
installing: libxml2-2.9.4-h6b072ca_5 ...
installing: mpfr-3.1.5-h12ff648_1 ...
installing: pandoc-1.19.2.1-hea2e7c5_1 ...
installing: readline-7.0-hac23ff0_3 ...
installing: zeromq-4.2.2-hb0b69da_1 ...
installing: dbus-1.10.22-h3b5a359_0 ...
installing: freetype-2.8-h52ed37b_0 ...
installing: gstreamer-1.12.2-h4f93127_0 ...
installing: libxslt-1.1.29-hcf9102b_5 ...
installing: mpc-1.0.3-hf803216_4 ...
installing: sqlite-3.20.1-h6d8b0f3_1 ...
installing: fontconfig-2.12.4-h88586e7_1 ...
installing: gst-plugins-base-1.12.2-he3457e5_0 ...
installing: alabaster-0.7.10-py36h306e16b_0 ...
installing: asn1crypto-0.22.0-py36h265ca7c_1 ...
installing: backports-1.0-py36hfa02d7e_1 ...
installing: beautifulsoup4-4.6.0-py36h49b8c8c_1 ...
installing: bitarray-0.8.1-py36h5834eb8_0 ...
installing: boto-2.48.0-py36h6e4cd66_1 ...
installing: cairo-1.14.10-haa5651f_5 ...
installing: certifi-2017.7.27.1-py36h8b7b77e_0 ...
installing: chardet-3.0.4-py36h0f667ec_1 ...
installing: click-6.7-py36h5253387_0 ...
installing: cloudpickle-0.4.0-py36h30f8c20_0 ...
installing: colorama-0.3.9-py36h489cec4_0 ...
installing: contextlib2-0.5.5-py36h6c84a62_0 ...
installing: dask-core-0.15.3-py36h10e6167_0 ...
installing: decorator-4.1.2-py36hd076ac8_0 ...
installing: docutils-0.14-py36hb0f60f5_0 ...
installing: entrypoints-0.2.3-py36h1aec115_2 ...
installing: et_xmlfile-1.0.1-py36hd6bccc3_0 ...
installing: fastcache-1.0.2-py36h5b0c431_0 ...
installing: filelock-2.0.12-py36hacfa1f5_0 ...
installing: glob2-0.5-py36h2c1b292_1 ...
installing: gmpy2-2.0.8-py36h55090d7_1 ...
installing: greenlet-0.4.12-py36h2d503a6_0 ...
installing: heapdict-1.0.0-py36h79797d7_0 ...
installing: idna-2.6-py36h82fb2a8_1 ...
installing: imagesize-0.7.1-py36h52d8127_0 ...
installing: ipython_genutils-0.2.0-py36hb52b0d5_0 ...
installing: itsdangerous-0.24-py36h93cc618_1 ...
installing: jdcal-1.3-py36h4c697fb_0 ...
installing: jedi-0.10.2-py36h552def0_0 ...
installing: lazy-object-proxy-1.3.1-py36h10fcdad_0 ...
installing: llvmlite-0.20.0-py36_0 ...
installing: locket-0.2.0-py36h787c0ad_1 ...
installing: lxml-4.1.0-py36h5b66e50_0 ...
installing: markupsafe-1.0-py36hd9260cd_1 ...
installing: mccabe-0.6.1-py36h5ad9710_1 ...
installing: mistune-0.7.4-py36hbab8784_0 ...
installing: mkl-service-1.1.2-py36h17a0993_4 ...
installing: mpmath-0.19-py36h8cc018b_2 ...
installing: msgpack-python-0.4.8-py36hec4c5d1_0 ...
installing: multipledispatch-0.4.9-py36h41da3fb_0 ...
installing: numpy-1.13.3-py36ha12f23b_0 ...
installing: olefile-0.44-py36h79f9f78_0 ...
installing: pandocfilters-1.4.2-py36ha6701b7_1 ...
installing: path.py-10.3.1-py36he0c6f6d_0 ...
installing: pep8-1.7.0-py36h26ade29_0 ...
installing: pickleshare-0.7.4-py36h63277f8_0 ...
installing: pkginfo-1.4.1-py36h215d178_1 ...
installing: ply-3.10-py36hed35086_0 ...
installing: psutil-5.4.0-py36h84c53db_0 ...
installing: ptyprocess-0.5.2-py36h69acd42_0 ...
installing: py-1.4.34-py36h0712aa3_1 ...
installing: pycodestyle-2.3.1-py36hf609f19_0 ...
installing: pycosat-0.6.2-py36h1a0ea17_1 ...
installing: pycparser-2.18-py36hf9f622e_1 ...
installing: pycrypto-2.6.1-py36h6998063_1 ...
installing: pycurl-7.43.0-py36h5e72054_3 ...
installing: pyodbc-4.0.17-py36h999153c_0 ...
installing: pyparsing-2.2.0-py36hee85983_1 ...
installing: pysocks-1.6.7-py36hd97a5b1_1 ...
installing: pytz-2017.2-py36hc2ccc2a_1 ...
installing: pyyaml-3.12-py36hafb9ca4_1 ...
installing: pyzmq-16.0.2-py36h3b0cf96_2 ...
installing: qt-5.6.2-h974d657_12 ...
installing: qtpy-1.3.1-py36h3691cc8_0 ...
installing: rope-0.10.5-py36h1f8c17e_0 ...
installing: ruamel_yaml-0.11.14-py36ha2fb22d_2 ...
installing: simplegeneric-0.8.1-py36h2cb9092_0 ...
installing: sip-4.18.1-py36h51ed4ed_2 ...
installing: six-1.11.0-py36h372c433_1 ...
installing: snowballstemmer-1.2.1-py36h6febd40_0 ...
installing: sortedcontainers-1.5.7-py36hdf89491_0 ...
installing: sphinxcontrib-1.0-py36h6d0f590_1 ...
installing: sqlalchemy-1.1.13-py36hfb5efd7_0 ...
installing: tblib-1.3.2-py36h34cf8b6_0 ...
installing: testpath-0.3.1-py36h8cadb63_0 ...
installing: toolz-0.8.2-py36h81f2dff_0 ...
installing: tornado-4.5.2-py36h1283b2a_0 ...
installing: typing-3.6.2-py36h7da032a_0 ...
installing: unicodecsv-0.14.1-py36ha668878_0 ...
installing: wcwidth-0.1.7-py36hdf4376a_0 ...
installing: webencodings-0.5.1-py36h800622e_1 ...
installing: werkzeug-0.12.2-py36hc703753_0 ...
installing: wrapt-1.10.11-py36h28b7045_0 ...
installing: xlrd-1.1.0-py36h1db9f0c_1 ...
installing: xlsxwriter-1.0.2-py36h3de1aca_0 ...
installing: xlwt-1.3.0-py36h7b00a1f_0 ...
installing: babel-2.5.0-py36h7d14adf_0 ...
installing: backports.shutil_get_terminal_size-1.0.0-py36hfea85ff_2 ...
installing: bottleneck-1.2.1-py36haac1ea0_0 ...
installing: cffi-1.10.0-py36had8d393_1 ...
installing: conda-verify-2.0.0-py36h98955d8_0 ...
installing: cycler-0.10.0-py36h93f1223_0 ...
installing: cytoolz-0.8.2-py36h708bfd4_0 ...
installing: h5py-2.7.0-py36he81ebca_1 ...
installing: harfbuzz-1.5.0-h2545bd6_0 ...
installing: html5lib-0.999999999-py36h2cfc398_0 ...
installing: networkx-2.0-py36h7e96fb8_0 ...
installing: nltk-3.2.4-py36h1a0979f_0 ...
installing: numba-0.35.0-np113py36_10 ...
installing: numexpr-2.6.2-py36hdd3393f_1 ...
installing: openpyxl-2.4.8-py36h41dd2a8_1 ...
installing: packaging-16.8-py36ha668100_1 ...
installing: partd-0.3.8-py36h36fd896_0 ...
installing: pathlib2-2.3.0-py36h49efa8e_0 ...
installing: pexpect-4.2.1-py36h3b9d41b_0 ...
installing: pillow-4.2.1-py36h9119f52_0 ...
installing: pyqt-5.6.0-py36h0386399_5 ...
installing: python-dateutil-2.6.1-py36h88d3b88_1 ...
installing: pywavelets-0.5.2-py36he602eb0_0 ...
installing: qtawesome-0.4.4-py36h609ed8c_0 ...
installing: scipy-0.19.1-py36h9976243_3 ...
fainstalling: setuptools-36.5.0-py36he42e2e1_0 ...
installing: singledispatch-3.4.0.3-py36h7a266c3_0 ...
installing: sortedcollections-0.5.3-py36h3c761f9_0 ...
installing: sphinxcontrib-websupport-1.0.1-py36hb5cb234_1 ...
installing: sympy-1.1.1-py36hc6d1c1c_0 ...
finstalling: terminado-0.6-py36ha25a19f_0 ...
installing: traitlets-4.3.2-py36h674d592_0 ...
ainstalling: zict-0.1.3-py36h3a3bf81_0 ...
installing: astroid-1.5.3-py36hbdb9df2_0 ...
installing: bleach-2.0.0-py36h688b259_0 ...
installing: clyent-1.2.2-py36h7e57e65_1 ...
installing: cryptography-2.0.3-py36ha225213_1 ...
installing: cython-0.26.1-py36h21c49d0_0 ...
installing: datashape-0.5.4-py36h3ad6b5c_0 ...
installing: distributed-1.19.1-py36h25f3894_0 ...
installing: get_terminal_size-1.0.0-haa9412d_0 ...
installing: gevent-1.2.2-py36h2fe25dc_0 ...
installing: imageio-2.2.0-py36he555465_0 ...
installing: isort-4.2.15-py36had401c0_0 ...
installing: jinja2-2.9.6-py36h489bce4_1 ...
installing: jsonschema-2.6.0-py36h006f8b5_0 ...
installing: jupyter_core-4.3.0-py36h357a921_0 ...
installing: matplotlib-2.1.0-py36hba5de38_0 ...
installing: navigator-updater-0.1.0-py36h14770f7_0 ...
installing: nose-1.3.7-py36hcdf7029_2 ...
installing: pandas-0.20.3-py36h842e28d_2 ...
installing: pango-1.40.11-h8191d47_0 ...
installing: patsy-0.4.1-py36ha3be15e_0 ...
installing: pyflakes-1.6.0-py36h7bd6a15_0 ...
installing: pygments-2.2.0-py36h0d3125c_0 ...
installing: pytables-3.4.2-py36h3b5282a_2 ...
installing: pytest-3.2.1-py36h11ad3bb_1 ...
installing: scikit-learn-0.19.1-py36h7aa7ec6_0 ...
installing: wheel-0.29.0-py36he7f4e38_1 ...
installing: astropy-2.0.2-py36ha51211e_4 ...
installing: bkcharts-0.2-py36h735825a_0 ...
installing: bokeh-0.12.10-py36hbb0e44a_0 ...
installing: flask-0.12.2-py36hb24657c_0 ...
installing: jupyter_client-5.1.0-py36h614e9ea_0 ...
installing: nbformat-4.4.0-py36h31c9010_0 ...
installing: pip-9.0.1-py36h8ec8b28_3 ...
installing: prompt_toolkit-1.0.15-py36h17d85b1_0 ...
installing: pylint-1.7.4-py36hb9d4533_0 ...
installing: pyopenssl-17.2.0-py36h5cc804b_0 ...
installing: statsmodels-0.8.0-py36h8533d0b_0 ...
installing: dask-0.15.3-py36hdc2c8aa_0 ...
installing: flask-cors-3.0.3-py36h2d857d3_0 ...
installing: ipython-6.1.0-py36hc72a948_1 ...
installing: nbconvert-5.3.1-py36hb41ffb7_0 ...
installing: seaborn-0.8.0-py36h197244f_0 ...
installing: urllib3-1.22-py36hbe7ace6_0 ...
installing: ipykernel-4.6.1-py36hbf841aa_0 ...
installing: odo-0.5.1-py36h90ed295_0 ...
installing: requests-2.18.4-py36he2e5f8d_1 ...
installing: scikit-image-0.13.0-py36had3c07a_1 ...
installing: anaconda-client-1.6.5-py36h19c0dcd_0 ...
installing: blaze-0.11.3-py36h4e06776_0 ...
installing: conda-4.3.30-py36h5d9f9f4_0 ...
installing: jupyter_console-5.2.0-py36he59e554_1 ...
installing: notebook-5.0.0-py36h0b20546_2 ...
installing: qtconsole-4.3.1-py36h8f73b5b_0 ...
installing: sphinx-1.6.3-py36he5f0bdb_0 ...
installing: anaconda-project-0.8.0-py36h29abdf5_0 ...
installing: conda-build-3.0.27-py36h940a66d_0 ...
installing: jupyterlab_launcher-0.4.0-py36h4d8058d_0 ...
installing: numpydoc-0.7.0-py36h18f165f_0 ...
installing: widgetsnbextension-3.0.2-py36hd01bb71_1 ...
installing: anaconda-navigator-1.6.9-py36h11ddaaa_0 ...
installing: ipywidgets-7.0.0-py36h7b55c3a_0 ...
installing: jupyterlab-0.27.0-py36h86377d0_2 ...
installing: spyder-3.2.4-py36hbe6152b_0 ...
installing: _ipyw_jlab_nb_ext_conf-0.1.0-py36he11e457_0 ...
installing: jupyter-1.0.0-py36h9896ce5_0 ...
installing: anaconda-5.0.1-py36hd30a520_1 ...
installation finished.

パスの設定

デフォルトでyesにしました。

Do you wish the installer to prepend the Anaconda3 install location
to PATH in your /home/tom/.bashrc ? [yes|no]
[no] >>> yes

You may wish to edit your .bashrc to prepend the Anaconda3 install location to PATH:

export PATH=/home/tom/anaconda3/bin:$PATH

Thank you for installing Anaconda3!

動作確認

$conda -v
conda: コマンドが見つかりません
$source ~/.bashrc
$conda -v
conda: コマンドが見つかりません
$

あれ、動かんwww
ひとまず再起動します。。。

パスがなぜか設定されていなかったので、自力で追加しました。
ユーザー名は各自のものを設定して下さい。

$echo 'export PATH=/home/tom/anaconda3/bin:$PATH' >> ~/.bashrc

Windows10にAnaconda Python3xをインストールした。

oneshotlife-python.hatenablog.com

過去エントリにて、ちょっとだけAnacondaについて書いたのでそちらも参照のこと。

PCを新しくしたので、Pythonの環境構築をしていた。
やはり、これからの時代はAnacondaかな?と思う。

IDEも含めて使用しそうなものがすべて入っているのが嬉しい。

Spyderは今後極めたい!!!

このUIはクールだよね!!!

f:id:oneshotlife_tom:20170324210105j:plain

PythonでYahoo!ファイナンスから株価を取得 #Python #WebScraping

2017/10/13 Pythonスクレイピング関連の書籍についてアップデート
2017/03/24 Pythonスクレイピング関連の書籍についてアップデート

コードを引数にして株価を取得したい

株価を取得したいというニーズは昔からある様子。2000年以前の書籍を見ても、株価を取得するサンプルコードがあった。htmlのタグ付けなど大きく変わっているだろうから、そのままは使えない。Pythonで書き直してみることに。

株価の情報はYahoo!ファイナンスから

他のサイトでもいいんだけど、URL設計がしっかりとしていて、タグ付けがちゃんとしていそうなので、ここにした。
http://finance.yahoo.co.jp/

株価詳細ページ

ソニーの詳細ページを見てみる。
URLは、

http://stocks.finance.yahoo.co.jp/stocks/detail/?code=6758.T

となっている。

ここから、ある推測が出来る。
ベースURLはきっと、

http://stocks.finance.yahoo.co.jp/stocks/detail/

だ。

パラメーターとしてcodeを渡す。コードの後ろには、「.T」が付く。

ここまで得た情報を元に、サンプルコードを組んでみる。

サンプルコード

import requests
from bs4 import BeautifulSoup

def get_stockprice(code):
    base_url = "http://stocks.finance.yahoo.co.jp/stocks/detail/"
    query = {}
    query["code"] = code + ".T"
    ret = requests.get(base_url,params=query)
    soup = BeautifulSoup(ret.content,"lxml")
    stocktable =  soup.find('table', {'class':'stocksTable'})
    symbol =  stocktable.findAll('th', {'class':'symbol'})[0].text
    stockprice = stocktable.findAll('td', {'class':'stoksPrice'})[1].text
    return symbol,stockprice
if __name__ == "__main__":
    symbol,stockprice = get_stockprice("6758")
    print symbol,stockprice

実行結果

>>> 
ソニー(株) 3,175

たくさんのコードを渡してみる。

せっかくなので、リストで渡してみましょうか。

    l = []
    l.append("8411")
    l.append("8306")
    l.append("3103")
    l.append("6803")
    l.append("6502")
    l.append("4689")
    l.append("8107")
    l.append("8303")
    l.append("9101")
    l.append("8604")
    l.append("6501")
    l.append("9972")
    l.append("6753")
    l.append("7201")
    l.append("6752")
    l.append("9501")
    l.append("7011")
    l.append("7647")
    l.append("7211")
    l.append("9104")
    for el in l:
        symbol,stockprice = get_stockprice(el)
        print symbol,stockprice

実行結果

(株)みずほフィナンシャルグループ 171.9
(株)三菱UFJフィナンシャル・グループ 519.4
ユニチカ(株) 71
ティアック(株) 42
(株)東芝 363.5
ヤフー(株) 420
(株)キムラタン 7
(株)新生銀行 163
日本郵船(株) 190
野村ホールディングス(株) 506.6
(株)日立製作所 535.3
アルテック(株) 210
シャープ(株) 167
日産自動車(株) 1,011.5
パナソニック(株) 977.2
東京電力ホールディングス(株) 415
三菱重工業(株) 424
(株)音通 32
三菱自動車(株) 538
(株)商船三井 237

見づれぇ~~~~~~~~~!!!
前株とか後株とかあるのな。。。ひとつに統一しろよwww

出力結果をテーブルに吐いてみた

最後をこうするだけ。

        print "|",symbol,"|",stockprice,"|"

実行結果

(株)みずほフィナンシャルグループ 171.9
(株)三菱UFJフィナンシャル・グループ 519.4
ユニチカ(株) 71
ティアック(株) 42
(株)東芝 363.5
ヤフー(株) 420
(株)キムラタン 7
(株)新生銀行 163
日本郵船(株) 190
野村ホールディングス(株) 506.6
(株)日立製作所 535.3
アルテック(株) 210
シャープ(株) 167
日産自動車(株) 1,011.5
パナソニック(株) 977.2
東京電力ホールディングス(株) 415
三菱重工業(株) 424
(株)音通 32
三菱自動車(株) 538
(株)商船三井 237

スクレイピングについて興味をお持ちの方は

Python初学者で、スクレイピング以外にもいろいろいじりたくて、スクレイピングもちょこってやってみたい方には以下がお勧め。

待望のPythonでのスクレイピングに関する書籍の日本語版が出ました!!!やった!!!

更に続々と刊行されています。

鬼のようにタイピングが速くなりたいなら速読式 タイピング練習 ソフト【脳速打ステージ】初級~上級編【頭脳王シリーズ】

ブラインドタッチ、最近はタッチタイピングと言うのかな?これが速くないとプログラミングの練習や実践に影響が出るので練習したほうがいいよ。

鬼の用にタイピングを練習したくてどんなソフトが人気になっているかを探してみた。当初の予想では、セガのタイピングオブザデッドあたりがトップだと思っていたら違っていた。脳力開発系の怪しげなソフトが堂々のランキング一位だった。もっとも、2000円ちょっとで買えるので、他の脳力開発系の教材と比べれば良心的どころの話ではない。

ソフトの構成を見たところ以下のようだった。

■基本のタイピング練習 
 すべての指を使って、キーボードを見ないでタイピングができるようになります。【初級~上級編】 

■速読式のタイピング練習 
 文字を「読んで入力」するのではなく、文字を「パッと見て」入力する速読的な入力習慣を身に付けることができます。 

○視点移動トレーニング 
 縦運動1、縦運動2、横運動1、横運動2 

○視点移動×タイピング 
 縦・横スライド、縦・横ワープ、N運動1・2、Z運動1・2、円運動1・2 

○視野拡大×タイピング 
 フラッシュ縦方向、フラッシュ横方向 

■【速読式】オートトレーニングモード 
 「速読術トレーニング」と「タイピング練習」を同時に行う効率的なトレーニングです。 

■タイピングスピード測定 

■100枚画像ワード連続入力<中級者向け> 

■実地文章トレーニングコース(テキスト保存シート) 
 お好きな文章を使って練習ができます。 

■トレーニング成果【3Dグラフ】 

■タイマー設定(やり過ぎ防止機能) 

■その他 
・対応一覧表は、印刷することができます。 
 ローマ字を覚えていないお子様などは、表を確認しながらタイピング練習をすることができます。 

・キー入力方法を変更することができます。 
 初期設定は、ヘボン式ローマ字に設定されています。 
 例)shi→ヘボン式、si→訓令式など

うん。悪くない。

正直な話、基礎的な練習は、どのソフトを使っても問題無いと思う。なんなら、Web上のフリーのサイトを使ってもいいくらいだ。

しかし!!!人並以上のスピードの文章が打てるようになったら、自作の文章を打つ練習をしたほうがいい。試しに、中上級者向けのタイピングソフトをやってみるといい。自分の文章の言い回しと違う文章が出てきたら、きっとタイピングミスをするよ。言葉って、個人の癖が出るじゃん?文章にも言葉の癖が出るわけ。他人の文章をなぞるよりも、自分の頭の中の文章を打つほうが断然速い。それは慣れているからだ。

だから、この機能は有難いよね。

■実地文章トレーニングコース(テキスト保存シート)
 お好きな文章を使って練習ができます。

UserAgentを上手いこと誤魔化すfake-useragent #Python

スクレイピングをするときに必須というわけではないのだが、UAは設定した方がいい。サイトの運営者であれば、ボットからのアクセスと人間からのアクセスはすぐにわかる。なるべく人間に似せるように設定してあげるのがポイントだと思う。UAを設定すること自体は簡単なのだけれども、どのUAを設定するかを調べるのが面倒臭い。

そこで、fake-useragentが使える!!!

>>> from fake_useragent import UserAgent
>>> UA = UserAgent()
>>> UA.ie
u'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)'
>>> UA.opera
u'Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14'
>>> UA.chrome
u'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1866.237 Safari/537.36'

こんな感じで、UAに良さげな文字列を返してくれる。
※余談だが、UserAgent()のコンストラクタが意外と重たかった。簡単な文字列を返却するだけではなく、中でいろいろやっているのだろう。

UAをアップデートすると、返却される情報が変わるようだ。

>>> UA.update()
>>> UA.ie
u'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.3; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729; MS-RTC LM 8)'
>>> UA.opera
u'Opera/9.80 (Windows NT 6.0; U; en) Presto/2.8.99 Version/11.10'
>>> UA.chrome
u'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36'

めちゃくちゃ便利だね!!!

Pythonで食っている俺が語るPythonの魅力(1)生産性や速度 #Python

Pythonとの出会い

Pythonとの出会いは何となくだった。それ以前は、SIerC言語とかC++を使い組込開発なんかをやっていた。C言語をやったことがある人ならわかるだろうが、「Hello,World」までの道のりがやたらと長い。今でこそ、WindowsPCにVirtualBoxなんか入れてLinux仮想マシンなんて作ってしまえば、標準でCコンパイラが入っているけれども当時はそうも行かなかった。Linuxマシンを用意してそこでガリガリ書くか、WindowsPCでガリガリ書いて、FTPか何かでLinuxマシンにアップして、TeraTermなんかでアクセスしコマンドを流す。その辺がめちゃくちゃ面倒だった。

その辺に嫌気が差してプログラミングにも嫌気を刺して辞めていく人間が多いのだが、私は違った。SIerを辞めて、一時期ニートをしていたのだが、そこでPerlを覚えてた。PerlでAmazonAPIなんかを使ってアフィリエイトの記事を自動生成したり、せどりのツールを作ってせどりをやっていたりしたら思いのほか当たった。特に、せどりの存在が大きかった。プログラミングという形の無いものを売るにはけっこうハードルが高い。WEBサイトのような形のものを売るならちょっと楽なのだが、それほどのデザイン力は無かった。せどりは、自分で作ったツールを使って、実際に現場でモノを仕入れて、ツールでいろいろと管理しながら、モノを売れるというところが大きかった。モノがあるか無いかは大きな違い。

そのままPerlを使っていても良かったのだが、Perlの文法の書きづらさに不満を持っていた。あとCPANのモジュールの依存関係など。いろいろなPCで環境を構築しているうちに、動いたり動かなかったりすることが多くなり、メンテナンスに時間を要するようになった。意外と環境周りのコストを軽視しがちだが、環境周りは大事。

その当たりから、外部モジュールを入れるのが容易で、管理もしやすいまとまりのある言語に興味を持ちだした。RubyPythonに興味を持って、いろいろ使ってみて、最終的にはPythonを使うことに決めた。

Hello,World!までの道のり

PythonはHello,World!を出力するまでの道のりが驚くほど簡単だった。
C言語であれば、前述のように環境構築をした後に、以下のようなコードを書かなければならないでしょう。

#include <stdio.h>

int main(int argc, char *args[])
{
    printf("Hello, World!\n");
    return 0;
}

そして、ファイル名をhello.cなどとして、以下のようなコマンドでコンパイルしてあげる必要がある。

$gcc -o hello hello.c

そして、出来た実行形式のファイルを実行してはじめて、コンソールにHello, World!が出力される。

既にこの時点でいろいろ疑問だ。

  • #include って?
  • int?
  • main???
  • *とか[]とか()と{}とか気持ち悪い
  • return?
  • ;?

初級者向けの書籍だとこの辺りは、おまじないのようなものと教えられるが、意味のわからないものを覚えるという意味では、まさにおまじないだと思ったwwwそして、私はおまじないが大嫌いなのだ。。。

Pythonでは、環境を構築し、IDLEを起動し、コンソールから以下を打ち込むだけで目的のものが出来る。

>>> print "Hello,World!"
Hello,World!

ほら、簡単でしょ?

Python IDLEの魅力

更に、こんなにPOPなカラフルなUI!!!
f:id:oneshotlife_tom:20161115210131p:plain

テキストエディタみたいに範囲選択も出来るし、コピペもCTRL+C,CTRL+Vで出来る。
Windows10でPythonとIDLEを使って開発する #Python - oneshotlife-pythonのブログ

Pythonの平易さ

比較的面倒な日付関連の処理やフォーマット処理も簡単に出来る

>>> import datetime
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2016, 11, 15, 21, 3, 23, 847000)
>>> "{0:%Y-%m-%d %H:%M:%S}".format(now)
'2016-11-15 21:03:23'

こんなのを、C言語で実装したらどうなるだろう?

Pythonの入門書でお薦めは

もちろん、Python>C言語というわけではないよ。PythonよりC言語のほうが実行速度がだいぶ早い。組込系など、パフォーマンスが重視される製品ではC言語が使われることが非常に多い。ここではPythonの出番は無い。では、何でPythonかというと、C言語よりも簡易な表記で、パワフルなことが出来るからだ。

例えば、あるWEBサイトのコンテンツを丸々取得して、title要素を取り出すという処理は、こなんなにも簡単に実装出来る。

>>> import requests
>>> from bs4 import BeautifulSoup
>>> url = "http://oneshotlife-python.hatenablog.com/"
>>> ret = requests.get(url)
>>> soup = BeautifulSoup(ret.content,"lxml")
>>> print  soup.find("title").text
oneshotlife-pythonのブログ

もちろん、これをC言語で実装出来ないわけではないが、何行かかるだろうか?仮に出来たとしたら、Pythonよりも高速なのは間違い無いが。

Pythonは遅いか?

C言語よりはもちろん遅い。速さはもちろん重要なファクターの一つだ。だが、近年は、マシンスペックが飛躍的に上がっている。私がPCをはじめた当初は、メモリなんてモリモリに積んで256MBだった。回線速度だって、8Mbps(ベストエフォート)だったし。今や、メモリは4GB積んでいるし、回線速度だって1Gbpsだ(ベストエフォート)。軽自動車とフェラーリよりも差がある。歩きとロケットくらいの差がある!!!何が言いたいのかと言うと、マシンスペックが上がったのだから、元々のスピードが驚くほど速くなっているということ。今後、マシンスペックの性能改善は、以前ほど倍々では増えていかないと思うが、緩やかに向上していくだろうし、CPUのコア数なども増えるだろうし、マルチスレッド機構などが標準で備わるようになるだろうから、いろんな環境面が飛躍的にアップしてくる。そんな中、人間がロジックを必死こいて考えて、性能改善なんてする必要は無くなってくるだろうというところだ。なので、C言語で書く機会は減るだろう。そして、Pythonに代表されるようなLL言語がもっともっと普及してくる。Pythonは遅いって?まぁそういうときもあるが、プロファイラで性能測定をしながらパフォーマンスチューニングも出来るし、部分的にC言語で書くことも出来る。なので、ベースはPythonで考えておいて損は無いのだ。

Pythonのパフォーマンスチューニングは

まとめ

ちょっとだけPythonの魅力を語ってみた。今回は、生産性や速度の面に焦点を当ててみた。生産性は火を見るまでもない。そして、速度の遅さは、マシンスペックがカバーしてくれる。プロファイラも充実している。C言語を埋め込むことも出来る。と、良いこと以外思いつかない。

Python知らない雑魚とかおる?

PythonとrequestsとBeautifulSoupでAmazonの中古品情報一覧を取得 #Python #WebScraping #せどり

説明不足な部分があったらコメント下さい。返信及び記事修正します。

過去エントリ

過去に以下エントリを書きました。
oneshotlife-python.hatenablog.com

Amazon Product Advertising APIへの不満

ただ、APIを使って取得出来ない情報がある!!!
例えば、中古品情報一覧。

f:id:oneshotlife_tom:20161113122508p:plain
これ、スクレイピングで取得したいよね!せどりにも使えるかも。

bottlenoseの問題ではなく、Amazon Product Advertising APIの仕様の問題。

WebScrapingの定石

まず、APIが無いかどうかは事前にチェックしなければならない。
スクレイピングは、サイトに負荷がかかる可能性が高いので、なるべく避けたい。
APIを使って取得出来る情報に対して、WebScrapingを行うのはナンセンス。
大抵の場合、WebScrapingを行うよりもAPIを使った方が、実装が容易で、メンテナンスも容易。

APIで取得出来ない情報がある場合の定石

ここは、WebScrapingの出番だ。
これにもやり方は二つある。

  • ライブラリを探す(CPAN,gem,PYPI,etc)
  • 自作する

本当は、ライブラリを探せれば一番。
wikipedia:車輪の再発明をやっても良いことは少ない。

今回いろいろ調べてみたのだが、少なくともPyPiにはまともなライブラリが無い。

ということで自作してみた。

IDLEでガリガリ

私は、スクリプトを自作する際には、毎回IDLEでガリガリやってから、
スクリプトに落とし込む。
oneshotlife-python.hatenablog.com

対象URL

ベースURLは

https://www.amazon.co.jp/gp/offer-listing/

その後ろに、スラッシュ区切りでASIN(書籍の場合はISBN)を入れてやればいいようだ。

https://www.amazon.co.jp/gp/offer-listing/4873117380/

対象のデータを格納しているタグを見つける

a-row a-spacing-mini olpOffer

IDLEでガリガリやったコード

>>> import requests
>>> from bs4 import BeautifulSoup
>>> uri = "https://www.amazon.co.jp/gp/offer-listing/4873117380/"
>>> ret = requests.get(uri)
>>> soup = BeautifulSoup(ret.content,"lxml")
>>> soup.find('div', {'class':'a-row a-spacing-mini olpOffer'})

結果は、長いので省略するが、ちゃんと取れてるっぽい。

価格情報は以下で取得出来る。

>>> print soup.find('div', {'class':'a-row a-spacing-mini olpOffer'}).find('div', {'class':'a-column a-span2 olpPriceColumn'}).find('span', {'class':'a-size-large a-color-price olpOfferPrice a-text-bold'}).text
            ¥ 3,392        

この要領で順次取得していく。
この辺で、ソースコードを綺麗にしつつ纏める。

サンプルコード

import requests
from bs4 import BeautifulSoup

def get_amazon_offer_listing(asin):
    for i in range(0,10): #取り敢えず10ページを制限とする
        uri = "https://www.amazon.co.jp/gp/offer-listing/" + asin + '/?startIndex=' + str(i*10)
        ret = requests.get(uri)
        if ret.status_code == 200:
            soup = BeautifulSoup(ret.content,"lxml")
            details = soup.findAll('div', {'class':'a-row a-spacing-mini olpOffer'})
            counter  = 0
            for detail in details:
                try:
                    price = detail.find('div', {'class':'a-column a-span2 olpPriceColumn'}).find('span', {'class':'a-size-large a-color-price olpOfferPrice a-text-bold'}).text.strip().replace(u"\uffe5 ","").replace(",","")
                except:
                    price = "No Data"
                try:
                    condition = detail.find('div', {'class':'a-section a-spacing-small'}).text.replace("\n","").replace(" ","")
                except:
                    condition =  "No Data"
                try:
                    comments = detail.find('div', {'class':'comments'}).text.strip().replace("\n","")[:100] + "..."
                except:
                    comments = "No Data"
                try:
                    seller =  detail.find('div', {'class':'a-column a-span2 olpSellerColumn'}).find('span', {'class':'a-size-medium a-text-bold'}).text.strip()
                except:
                    seller = "Nodata"
                counter +=1 
                print  "|",price, "|",condition, "|",seller, "|",comments, "|"
            if counter !=10:
                #次のデータは無いため処理終了
                break
            else:
                pass
            
if __name__ == "__main__":
    get_amazon_offer_listing("4873117380")

実行結果

3392 中古品-非常に良い (株)バリューブックス 365日毎日発送しております。 ◆◆◆カバーに若干の使用感がありますが、きれいな状態です。迅速・丁寧な発送を心がけております。【毎日発送】...
3650 中古品-非常に良い スタビラウス 新品に近い非常に綺麗な状態です。 書き込み等はございません。 クリスタルパック(OPP袋)にて梱包しております。 アマゾンからの発送になります。...
3937 中古品-良い 古通販・買取ならエコマケ 中古品ですので、多少の傷み・小口ヤケがある場合がございますがご容赦くださいませ。その他の状態につきましては、Amazonコンディションガイドラインに準拠いたします。...
3996 新品 Nodata No Data
5088 中古品-非常に良い Bookstore MONACO(ブックストアモナコ 書店で購入後未読。書店までの擦れ等はご容赦願います。...
5420 中古品-ほぼ新品 いなかのお店 新品未使用品です。 3営業日以内に緩衝シートで梱包の上クロネコDM便・クリックポスト等で発送致します。 当商品は在庫僅少に伴うプレミア価格での販売となりますので予めご了承ください。 また万一在庫切れが...
5475 中古品-ほぼ新品 SelectShop SOME 【未読未開封新品】 です。   ◆丁寧な包装など、親身な対応を心がけています、何でもご相談ください。...
5500 中古品-ほぼ新品 ☆★林檎書房★☆ ☆★新品未読商品★☆丁寧・防水梱包で当日~3日以内の発送、1週間以内のお届けを原則としております。在庫希少により高額ですが、ご理解・納得の上でご注文をお願いします。 在庫切れの際はメールでお知らせ後、...
5540 中古品-ほぼ新品 天保堂【防水対策!お問い合わせ大歓迎!!公安委員会621100132007号】 ■新品美品です。■希少人気書籍のため、定価越えしております。ご了承下さい。■原則2営業日以内に発送いたします。■発送は、ご注文確認後、再検品し問題がなければクリスタルパックにて、納品書とともに梱包し、...
5594 中古品-ほぼ新品 せぶん 一度書店に並んでいた新品の本を保管しております。表紙、中身共に綺麗な状態の本です。梱包材+封筒にてしっかり梱包した上、発送致します。併売のため、万一の売り切れの際には版元に在庫を確認後、発送についてご...
5641 中古品-ほぼ新品 poplar-book 未読品をご注文後3営業日以内にビニール・緩衝材で梱包し発送いたします。万一、品切れのさいは、速やかにご注文を取り消させて頂きます。稀少本の為、定価より高価になっております。ご確認ください。 ...
5860 中古品-ほぼ新品 メディアフロント ほぼ新品の使用感の少ない商品です。2から8営業日で商品を発送致します。...
5900 中古品-ほぼ新品 ☆蒼風堂☆年中無休。複数同時購入で2点目以降100円返金 新品未読の商品ですので非常に綺麗です。迅速丁寧に対応いたします。International shipping available....
6000 新品 ベビーボックス No Data
6000 中古品-ほぼ新品 ウィステリアインベストメントセールス 未読の新品です。...
6793 中古品-ほぼ新品 トリニティブックス東京 商品コメント欄を必ずご確認下さい ★領収書必要な場合は注文時にご連絡下さい 新品未読品を2~4日以内に東京都より発送、安心梱包・誠実対応でお届け。在庫切れのときは速やかにご連絡いたします。定価(¥3,996)より高額ですが、ご検討よろしくお願いします。 ...
7992 中古品-ほぼ新品 デイジー&マーガレット 新品。商品状態が説明と違う場合は、返品・返金を承ります。...