カテゴリー別アーカイブ: Python

【Python】pyenvで環境構築

構築例

// pyenvをインストール
適当なディレクトリで下記コマンドを実行

$ git clone git://github.com/yyuu/pyenv.git ./.pyenv
$ git clone git://github.com/yyuu/pyenv-virtualenv.git ./.pyenv/plugins/pyenv-virtualenv

$ vi ~/.bashrc

export PYENV_ROOT=”{適当なディレクトリ}/.pyenv”
export PATH=”$PYENV_ROOT/bin:$PATH”
eval “$(pyenv init -)”

$ source ~/.bashrc

// pyenvからpythonをインストール
pyenv install anaconda3-2.5.0
pyenv global anaconda3-2.5.0

// condaでライブラリをアップデート
conda update conda
conda update anaconda
conda update –all
conda install anaconda-client

Googlebot かどうかの確認

サイトにどのくらいクローラーがきてるのか?
ってのは、サーチコンソールである程度わかるけど
どのページに?どの階層配下に?っていう詳細になると
アクセルログを解析する必要が、、、

でも、ログの何を見ればいいのか?

一番単純なのは、UAに「googlebot」とかの文字列で判断、、、
でもUAなんていくらでも偽装できるし、なんか
偽ボットに悩まされてるなんて記事もあったりして
UAで判断するのはベストではないと思われる

そんな中、こんなページを発見!
Googlebot かどうかの確認

ログに書かれてるIPから、hostコマンドでhost名を取得して
googlebot.comまたはgoogle.comであることを確認。
そしたら、host名から今度はIPを取得して、そのIPが元のIPと
等しければ、そのアクセスはGooglebotだ~!

GoogleがGooglebotをこう見分けろというのだから間違いないw

これをpythonでやる場合のサンプル

-- coding: utf-8 --

import socket
import sys

hostname => IP

print(socket.gethostbyname(hostname))

IP => hostname

print(socket.gethostbyaddr(ip))

pythonで検索アナリティクスAPIを試す

Google Search Console(GSC)の検索アナリティクスAPIを試す。
まだまだ解説してるサイトが少ない気がする。。。

環境は、
CentOS7
Python3.5

■ ステップ1:Search Console APIを有効にする

まずは、Google Developers Console にアクセスして
「Google Search Console API」を有効にする。

右サイドバーの[認証情報] > [OAuth同意画面]をクリックして、
[ユーザーに表示するサービス名]に適当なのを入力して
[保存]をクリック!

[認証情報] > [認証情報を作成] > [OauthクライアントID] と進んで
「アプリケーションの種類」に[その他]を選んで[作成]ボタンをクリック

下記2つをメモメモ
 ・クライアント ID
 ・クライアント シークレット

JSONはダウンロードしておく

■ ステップ2:Google Client Libraryをインストール
pip install –upgrade google-api-python-client
もしくは
easy_install –upgrade google-api-python-client

■ ステップ3:サンプルクエリ実行
samples repositoryよりsearch_analytics_api_sample.pyを取得

JSONファイルを、client_secrets.json というファイル名にして
上記ファイルと同じ階層に配置

search_analytics_api_sample.py を開き、client_id、client_secretを
先ほど取得した値に変更

プログラムが恐らくpython3に対応していないので修正。
・print してるところはカッコで括ってあげる。いくつかあるので全て修正
 例)
 修正前: print title + ‘:’
修正後: print(title + ‘:’)

・python詳しくないので詳細不明だけど、文字コード関連の扱いが変わってるので修正
修正前: keys = b’,’.join(row[‘keys’]).encode(‘utf-8’)
修正後: keys = ‘,’.join(row[‘keys’])

ファイルを実行!
python search_analytics_api_sample.py https://www.example.com 2015-05-01 2015-05-30

init() takes at most 4 positional arguments (5 given)
Go to the following link in your browser: https://accounts.google.com/o/oauth2/v2/auth?access_type=xxxx
Enter verification code:

こんなメッセージが出てくるので、いわれるがまま
書いてあるURLにアクセスすると

「このコードをコピーし、アプリケーションに切り替えて貼り付けてください」
みたいなページが表示されるので、コードをコピペしてエンター!

無事成功!

word2vec を wikiデータを使って検証してみる

言葉の足し算やら引き算やらができるという
word2vecとやらを試してみたよ!

・下準備

まずは、こちらのサイトからwikiのデータを取得
wget https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2
約20分くらいかな

次に、落としてきたデータがxml形式なので、
こちらをテキスト形式に変換するためにwp2txtというのを使用するのだけど
wp2txtをインストールするためにrubyの環境を用意

git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
mkdir ~/.rbenv/plugins
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

.bashrcなどに
export RBENV_ROOT=”~/.rbenv”
export PATH=”${RBENV_ROOT}/bin:${PATH}”
eval “$(rbenv init -)”

設定を反映
source .bashrc

必要なモジュールをインストールしておく
yum install -y readline-devel openssl-devel

こちらでインストール可能なバージョンが確認できるので
rbenv install -l

rbenv install 2.2.0
rbenv rehash
rbenv global 2.2.0

確認
rbenv versions

これでruby環境が整った(はず)!

wp2txtのインストール
gem install wp2txt

そしてテキストに変換
wp2txt –input-file jawiki-latest-pages-articles.xml.bz2
1時間くらい

【Python】 プロキシを通してURLをたたく

Python3でプロキシを通してアクセスしたいときの手順をメモメモ


import urllib.request

opener = urllib.request.build_opener()
proxy_handler = urllib.request.ProxyHandler({'http':'[ホスト名]:[ポート番号]'})
opener.add_handler(proxy_handler)

response = opener.open(url, data=None, timeout=8)
html = response.read()

ふむ

あと、ページを読み込むときにUTF8以外のページにも対応させるために
この関数を通すようにしてみたー

def conv_encoding(data):
lookup = ('utf_8', 'euc_jp', 'euc_jis_2004', 'euc_jisx0213',
'shift_jis', 'shift_jis_2004','shift_jisx0213',
'iso2022jp', 'iso2022_jp_1', 'iso2022_jp_2', 'iso2022_jp_3',
'iso2022_jp_ext','latin_1', 'ascii')
html = ''


html = response.read()

のところを、こんな感じに変更

html = conv_encoding(response.read())

ふむふむ

【Python】 メインコンテンツを抽出

サイト上のページから、メインコンテンツだけを抽出したいな~
って思っても、ロジックが複雑そ~
って思って、あきらめていたらこんな便利なものが~
ってことでメモメモ

言語はPythonなのだけれど、ちょうど今マイブームなので問題なしっw

readability-lxmlというモジュールで実現できるらしい!

まずはpipでインストール!

pip install readability-lxml

そしたら、下記コマンドをたたくと、なんとメインコンテンツが返ってくるのだ~

python -m readability.readability -u http://pypi.python.org/pypi/readability-lxml

ちょー簡単なうえ、優秀!!

記事ページとかなら高確率で抽出できる!
こりゃ便利w

Python3でMySQL に接続してみる

Python3でMySQLを普通に使おうと思ったら
エラーが出たので、そのときの対処をメモメモ

何も考えずに
MySQLdbをインポートしたところ
import MySQLdb

No module named ‘MySQLdb’

って怒られてしまった。。

調べると現時点ではどうやら、
MySQLdb (1.2.4)最新リリース版ではPython 3をサポートしていない?!
えっ、そんなことって、、、なんて使えないんだ、、、

でも、そこは親切などなた様かが、
ちゃんと抜け道を用意してくださっているので
それに従わせていただきまーす!

まずは、こちらから最新のファイルを持ってこよー!
mysql-connector-python

$ wget http://cdn.mysql.com/Downloads/Connector-Python/mysql-connector-python-2.0.4.zip#md5=3df394d89300db95163f17c843ef49df

早速解凍してインストール!!
$ unzip unzip mysql-connector-python-2.0.4.zip
$ cd mysql-connector-python-2.0.4
$ python setup.py install

一応確認!
$ pip list | grep mysql
mysql-connector-python (2.0.4)

準備OK!

接続できることを確認!


import mysql.connector

conn = mysql.connector.connect(
user='xxxx',
passwd='xxxx',
host='localhost',
database='xxxx')

c = conn.cursor()

まぁ結構かんたんにできたけれども
それでもなんかめんどくさいよー!