読者です 読者をやめる 読者になる 読者になる

oneshotlife-pythonのブログ

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

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

プログラミング基礎

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

うん。悪くない。

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

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

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

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

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

PyPI

スクレイピングをするときに必須というわけではないのだが、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との出会い

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 中古品-ほぼ新品 デイジー&マーガレット 新品。商品状態が説明と違う場合は、返品・返金を承ります。...

PythonでAmazonの本・Kindle本のカテゴリーを取得する #Python #WebScraping

WebScraping requests BeautifulSoup

最近、バカの一つ覚えみたいにスクレイピングをやっております。。。
requestsとBeautifulSoupを使うだけでもいろいろ出来てしまう。

Amazonの本・Kindle本のカテゴリーを取得したい

最終的には、書籍や電子書籍のカテゴリーごとに毎日ランキングを取得したい。その前段階で、どんなカテゴリーがあるのかを把握したい。

対象ページ

Amazon.co.jp 売れ筋ランキング: 本 の中で最も人気のある商品です
Amazon CAPTCHA
上記ページの左のメニューにある一覧からカテゴリー名とURLを取得しようと思う。ちなみに、そのカテゴリーの下に更に階層があってサブカテゴリはあるが、一階層しか取得しないものとする。「Kindleストア > Kindle本 > 文学・評論 > 小説・文芸 > 日本の小説・文芸」のランキング一覧を取得するなんてことも出来ないことは無いけど、そこまで細分化されたランキングを作成したところで面白くないだろうから、やめて置く。Scrapyを使えば、出来ることは出来ると思うが。

分析の仕方

Google Chromeで上記の対象のページを開く

取得対象をドラックして右クリックし検証を選択

f:id:oneshotlife_tom:20161109150835p:plain

対象のタグ(class,idなど)に当たりをつける

tableレイアウトを使っているなど、今時ではあり得ない。もしあるとしたら、やっかいだ。大抵は、divで囲まれている。
f:id:oneshotlife_tom:20161109151458p:plain
↑赤字を付けたあたりが怪しいよね?

<div id="zg_left_col2">
  ...
  <li>...</li>
  <li>...</li>
  <li>...</li>
  <li>...</li>
  ...
</div>

↑こんな感じになっているのではないかと推測してみる。そして、俺の大好きなIDLEを使ってガリガリソースコードを書いて動かしながら検証してみる。もちろん、推測が外れることもあろうが、外れたらまたやり直せばいいだけ。

IDLEでガリガリやってみる

Windows10でPythonとIDLEを使って開発する #Python - oneshotlife-pythonのブログも読んでね!

>>> import requests
>>> from bs4 import BeautifulSoup
>>> uri = "https://www.amazon.co.jp/gp/bestsellers/books/"
>>> ret = requests.get(uri)
>>> soup = BeautifulSoup(ret.content,"lxml")

この辺まではテンプレだと思っていただいて結構。スクリプト(ファイル)を書くのではなく、shellで叩きながらやっていったほうが上手く行くことが多い。プログラミングは覚えて書くのではなく、書きながら覚える。

で、結局以下のコードに落ち着く。

>>> print soup.find('div', {'id':'zg_left_col2'})
<div id="zg_left_col2">
<ul id="zg_browseRoot">
<li class="zg_browseUp"> ‹

     <a href="https://www.amazon.co.jp/gp/bestsellers">すべてのカテゴリ</a>
</li>
<ul>
<li>
<span class="zg_selected"> 本</span>
</li>
<ul>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/466284">文学・評論</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/571582">人文・思想</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/571584">社会・政治</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/492152">ノンフィクション</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/466286">歴史・地理</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/466282">ビジネス・経済</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/492054">投資・金融・会社経営</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/466290">科学・テクノロジー</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/492166">医学・薬学・看護学・歯科学</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/466298">コンピュータ・IT</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/466294">アート・建築・デザイン</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/466292">趣味・実用</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/2400471051">スポーツ・アウトドア</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/492228">資格・検定</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/466304">暮らし・健康・子育て</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/492090">旅行ガイド</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/466302">語学・辞事典・年鑑</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/3148931">教育・学参・受験</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/466306">絵本・児童書</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/2501045051">コミック・ラノベ・BL</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/500592">タレント写真集</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/466296">エンターテイメント</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/492266">ゲーム攻略本</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/2189048051">文庫</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/2189049051">新書</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/2189050051">ノベルス</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/13384021">雑誌</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/746102">楽譜・スコア・音楽書</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/13383771">ポスター</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/10667101">アダルト</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/2457910051">ライトアダルト</a></li>
<li><a href="https://www.amazon.co.jp/gp/bestsellers/books/2748677051">カレンダー</a></li>
</ul>
</ul>
</ul>
<div class="zg_displayAd">
</div>
</div>
>>> 

推測が正しいということがわかる。

次は、この中からliタグのリストを抽出して、for文で回していく。
この辺から、スクリプト化していくと楽なような気がする。for文やif文などが入ると、shellで叩くのは非常に面倒臭いので。

サンプルコード

import requests
from bs4 import BeautifulSoup

def get_amazon_subcategory(uri):
    ret = requests.get(uri)
    soup = BeautifulSoup(ret.content,"lxml")
    for link in soup.find('div', {'id':'zg_left_col2'}).findAll('a'):
        print "|",link.text,"|", link.get("href"),"|"    

if __name__ == "__main__":
    get_amazon_subcategory("https://www.amazon.co.jp/gp/bestsellers/books/")
    get_amazon_subcategory("https://www.amazon.co.jp/gp/bestsellers/digital-text/2275256051/")  

実行結果

Python 2.7.12 |Continuum Analytics, Inc.| (default, Jun 29 2016, 11:42:13) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
======= RESTART: C:\Users\oneshot\Desktop\py\get_amazon_subcategory.py =======

すべてのカテゴリ https://www.amazon.co.jp/gp/bestsellers
文学・評論 https://www.amazon.co.jp/gp/bestsellers/books/466284
人文・思想 https://www.amazon.co.jp/gp/bestsellers/books/571582
社会・政治 https://www.amazon.co.jp/gp/bestsellers/books/571584
ノンフィクション https://www.amazon.co.jp/gp/bestsellers/books/492152
歴史・地理 https://www.amazon.co.jp/gp/bestsellers/books/466286
ビジネス・経済 https://www.amazon.co.jp/gp/bestsellers/books/466282
投資・金融・会社経営 https://www.amazon.co.jp/gp/bestsellers/books/492054
科学・テクノロジー https://www.amazon.co.jp/gp/bestsellers/books/466290
医学・薬学・看護学・歯科学 https://www.amazon.co.jp/gp/bestsellers/books/492166
コンピュータ・IT https://www.amazon.co.jp/gp/bestsellers/books/466298
アート・建築・デザイン https://www.amazon.co.jp/gp/bestsellers/books/466294
趣味・実用 https://www.amazon.co.jp/gp/bestsellers/books/466292
スポーツ・アウトドア https://www.amazon.co.jp/gp/bestsellers/books/2400471051
資格・検定 https://www.amazon.co.jp/gp/bestsellers/books/492228
暮らし・健康・子育て https://www.amazon.co.jp/gp/bestsellers/books/466304
旅行ガイド https://www.amazon.co.jp/gp/bestsellers/books/492090
語学・辞事典・年鑑 https://www.amazon.co.jp/gp/bestsellers/books/466302
教育・学参・受験 https://www.amazon.co.jp/gp/bestsellers/books/3148931
絵本・児童書 https://www.amazon.co.jp/gp/bestsellers/books/466306
コミック・ラノベ・BL https://www.amazon.co.jp/gp/bestsellers/books/2501045051
タレント写真集 https://www.amazon.co.jp/gp/bestsellers/books/500592
エンターテイメント https://www.amazon.co.jp/gp/bestsellers/books/466296
ゲーム攻略本 https://www.amazon.co.jp/gp/bestsellers/books/492266
文庫 https://www.amazon.co.jp/gp/bestsellers/books/2189048051
新書 https://www.amazon.co.jp/gp/bestsellers/books/2189049051
ノベルス https://www.amazon.co.jp/gp/bestsellers/books/2189050051
雑誌 https://www.amazon.co.jp/gp/bestsellers/books/13384021
楽譜・スコア・音楽書 https://www.amazon.co.jp/gp/bestsellers/books/746102
ポスター https://www.amazon.co.jp/gp/bestsellers/books/13383771
アダルト https://www.amazon.co.jp/gp/bestsellers/books/10667101
ライトアダルト https://www.amazon.co.jp/gp/bestsellers/books/2457910051
カレンダー https://www.amazon.co.jp/gp/bestsellers/books/2748677051
すべてのカテゴリ https://www.amazon.co.jp/gp/bestsellers
Kindleストア https://www.amazon.co.jp/gp/bestsellers/digital-text
文学・評論 https://www.amazon.co.jp/gp/bestsellers/digital-text/2292699051
人文・思想 https://www.amazon.co.jp/gp/bestsellers/digital-text/2292095051
社会・政治 https://www.amazon.co.jp/gp/bestsellers/digital-text/2293149051
ノンフィクション https://www.amazon.co.jp/gp/bestsellers/digital-text/2291791051
歴史・地理 https://www.amazon.co.jp/gp/bestsellers/digital-text/2293076051
ビジネス・経済 https://www.amazon.co.jp/gp/bestsellers/digital-text/2291905051
投資・金融・会社経営 https://www.amazon.co.jp/gp/bestsellers/digital-text/2292576051
科学・テクノロジー https://www.amazon.co.jp/gp/bestsellers/digital-text/2293263051
医学・薬学 https://www.amazon.co.jp/gp/bestsellers/digital-text/2292340051
コンピュータ・IT https://www.amazon.co.jp/gp/bestsellers/digital-text/2291657051
アート・建築・デザイン https://www.amazon.co.jp/gp/bestsellers/digital-text/2291481051
趣味・実用 https://www.amazon.co.jp/gp/bestsellers/digital-text/2292479051
スポーツ・アウトドア https://www.amazon.co.jp/gp/bestsellers/digital-text/2292480051
資格・検定・就職 https://www.amazon.co.jp/gp/bestsellers/digital-text/2293536051
暮らし・健康・子育て https://www.amazon.co.jp/gp/bestsellers/digital-text/2292803051
旅行ガイド・マップ https://www.amazon.co.jp/gp/bestsellers/digital-text/2292799051
語学・辞事典・年鑑 https://www.amazon.co.jp/gp/bestsellers/digital-text/2293396051
教育・学参・受験 https://www.amazon.co.jp/gp/bestsellers/digital-text/2292600051
絵本・児童書 https://www.amazon.co.jp/gp/bestsellers/digital-text/2293363051
コミック https://www.amazon.co.jp/gp/bestsellers/digital-text/2293143051
ライトノベル https://www.amazon.co.jp/gp/bestsellers/digital-text/2410280051
ボーイズラブ https://www.amazon.co.jp/gp/bestsellers/digital-text/2450063051
ティーンズラブ https://www.amazon.co.jp/gp/bestsellers/digital-text/3432431051
タレント写真集 https://www.amazon.co.jp/gp/bestsellers/digital-text/2291790051
エンターテイメント https://www.amazon.co.jp/gp/bestsellers/digital-text/2291568051
楽譜・スコア・音楽書 https://www.amazon.co.jp/gp/bestsellers/digital-text/2293031051
雑誌 https://www.amazon.co.jp/gp/bestsellers/digital-text/2275257051
アダルト https://www.amazon.co.jp/gp/bestsellers/digital-text/2291476051

スクレイピングについてもっと知りたい方は

PythonによるWebスクレイピング

PythonによるWebスクレイピング

oneshotlife-python.hatenablog.com

私のPython環境 #Python

me

2016/11/09時点

OS

Windows10

Pythonパッケージ

conda 4.2.12

Python

python2.7.12

インストールライブラリ

$pip freeze

で調べたもの。

  • attrs==15.2.0
  • backports.shutil-get-terminal-size==1.0.0
  • beautifulsoup4==4.5.1
  • bottlenose==1.0.1
  • bs4==0.0.1
  • cffi==1.8.3
  • colorama==0.3.7
  • constantly==15.1.0
  • cryptography==1.5.3
  • cssselect==0.9.2
  • decorator==4.0.10
  • enum34==1.1.6
  • idna==2.1
  • incremental==16.10.1
  • ipaddress==1.0.17
  • ipython==5.1.0
  • ipython-genutils==0.1.0
  • lxml==3.6.4
  • parsel==1.0.3
  • path.py==0.0.0
  • pathlib2==2.1.0
  • pickleshare==0.7.4
  • prompt-toolkit==1.0.8
  • pyasn1==0.1.9
  • pyasn1-modules==0.0.8
  • pycparser==2.16
  • PyDispatcher==2.0.5
  • Pygments==2.1.3
  • pyOpenSSL==16.0.0
  • pywin32==220
  • queuelib==1.4.2
  • requests==2.11.1
  • Scrapy==1.1.1
  • service-identity==16.0.0
  • simplegeneric==0.8.1
  • six==1.10.0
  • traitlets==4.3.1
  • Twisted==16.5.0
  • w3lib==1.15.0
  • wcwidth==0.1.7
  • win-unicode-console==0.5
  • zope.interface==4.3.2

WindowsでPythonを使ってWebScrapingやデータ解析をしたいならAnaconda/Miniconda一択

インストール/設定 Anaconda/Miniconda

Python2xかPython3xか

今のところどちらにも絞れない。Python2xのサポートは2020年までらしい*1
今後のことを考えるならPython3xにしておいて間違いは無い。Python関連の書籍もPython3xに絞ったものが増えつつあるので。
では、Python2xを今更ながらインストールする意味はあるのか?と言われると、ある!
WebScrapingをするためのフレームワーク「Scrapy」がPython2xにしか対応していないので。。。
他にも、Python2xにしか対応していないモジュールはたくさんあるわけで。。。

私の場合のPython2xとPython3xの使い分け

基本的にはPython3x
Scrapyを使う場合だけPython2x
これで行こうと思う。

Python2xとPython3xを共存させるには

これが結構難しい。書籍を見ても、そこのところが詳しいものが無い。
Python2xとPython3xをそれぞれインストールしてvertualenvで使い分けてなどやっているとそのうち破たんする。

そもそも、あなたは何のためにPythonを使うのか?
サラリーマンをやっていて仕方なくPythonを使うのであれば、会社で強制されたツールを使い、必死こいてメンテナンスしていくしかない。
環境構築やメンテには相当の時間を割かねばならないだろう。

私は、、、違う。
簡単に言えば趣味として、恰好良く言えば自己実現のためにPythonを使う。
自分やりたいことをやれればそれでいい。面倒臭いことは無いに越したことはない。

なので、Anaconda/minicondaを選ぶ!

環境構築に無駄な時間をかけてでも詳しくなりたい人は他をどうぞ。

Anaconda/minicondaとは

https://www.continuum.io/
Anaconda/minicondatってのはPythonで書かれたデータ解析のプラットフォームのこと。必要な環境は一通り揃っている、つまりパッケージ化されている。ライブラリの依存関係なども解決されている。Python2xとPython3xの使い分けも簡単に出来る*2

ダウンロード

Download Anaconda Now! | Continuum
ここから。
Python2xとPython3xを選ぶところがあるが、Python3xを選んでおけばいい。condaを使えば、Python2xの環境も後から作れる。

インストール

exeを叩いて、デフォルトでNextを連打していけばOK
結構重めなので時間がかかる。

Spyder立ち上げてみた

これぞIDEだわ。。。めっちゃくちゃ高機能。しかし、重量級。
f:id:oneshotlife_tom:20161106230023p:plain

*1:延期されたので、また延期される可能性はあるが。。。

*2:virtualenvなんて必要無い