-最近はWebスクレイピングにお熱である。趣味の機械学習のデータセット集めに利用したり、自身のカードの情報や各アカウントの支払い状況をスクレイピングしてスプレッドシートで管理したりしている。最近この手の記事は多くあるものの「~してみた」から抜けた記事が見当たらないので、大規模に処理する場合も含めた大きめの記事として知見をまとめておく。2018/03/05:大きな内容なのでここに追記します。github.comphantomJSについての記載が記事内でありますが、phantomJSのメンテナが止めたニュースが記憶に新しいですが、上記issueにて正式にこれ以上バージョンアップされないとの通達。Chrome等を使う方が良さそうです。-主に以下のような話をします。-最初に言うまでもないが、Pythonのバージョンは3系を選択すべきである。2系ではユニコードの問題に悩まされ、小学生にもバカにされる。encodingに悩まされる事を防ぎたければ3.x系。requests標準的なHTTPライブラリ。HTTPを使うならrequestsにするのが吉。3.xでは廃止され、urllib2もurllib.requestとなった。そのurllibをメインページ(http://requests-docs-ja.readthedocs.io/en/latest/)で「APIがまともに使えません」「Python的ではない」とまで言うのがrequestsというライブラリである。それら以外にもurllib3(requests内部でも使われている)やhttplib、http.clientなど多数HTTPライブラリがあるのがPythonの現状。DailyHckrメインページで自ら「人が使いやすいように作られた、エレガントでシンプルなPythonのHTTPライブラリ」と言い切るクールなやつ。スクレイピングに関してのみ挙げておくと以下が簡易に行えるのがメリット。SSL、ベーシック認証、ダイジェスト認証スレッドセーフ本文内容がユニコードになって返ってくるタイムアウトが簡易かつ正しいHTTPリクエストかける時は、timeoutとheaderをかけて実行するのが吉。timeoutに関しては30secを設定する等のネット記事が多々見られる。以下によればtimeoutはページのロード時間を含まないので、ガッツリWebスクレイピングをかけるならボトルネックにならないよう短くしておいて大丈夫。ちなみにデフォルトでは60sec。http://requests-docs-ja.readthedocs.io/en/latest/user/quickstart/#timeoutsheaderには自身の正しいブラウザとOSをUser-Agentとして設定しておきましょう。contentでstrprint(resp.text)requestsではオレオレ証明書等を利用したWebサービスやお固めのWebページを取得しようとすると以下のようなエラーがでる場合がある。(_ssl.c:749)UNKNOWN_PROTOCOLSSL関連についてはverifyなるフラグが設定できるので以下のように。deleteなどのメソッドの他、oauth認証やストリーム接続も用意されている。このやり方でHTMLを取得した場合文字化けする可能性があるが、そちらについては後述する。iOSなどではデフォルトでrequestsがインテグレーションされている。あとはHTTP処理をガツガツ回す前にDNSの設定をしていた方が良い。beautifulsoup」だとbeautifulsoup3が入ってしまう。所々module名が変わっていたりいる。違いはこの辺りを参照。https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.html#porting-code-to-bs4HTMLの構造解析をした上で、HTMLを綺麗に整形、問題のある点の修正等を行ってくれる。簡易な所では、headタグがbodyタグの中にあったら丁寧に外出ししてくれるとか。RSS等にも対応している。Wonderland」に出てくる美味しいスープの歌らしい。YouTube一番シンプルなところだと以下。整形後のhtml表示print(soup.prettify())ガッツリスクリプトにして回す時は、解析器を選択しておくと吉。documentationパーサの良し悪しを考えるとlxmlでチャレンジしてダメならhtml5libを試すのが良さそう。"html5lib")parseして情報を得るだけならlxml単体でも可能である(lxmlはそもそもそういうパッケージ)。lxml単体でやるメリットとしてlxml.html.fromstringでDOMのツリー構造を得られるとか、make_links_absolute()、rewrite_links()によって全てのリンクを相対パスに書き換えられたりとかが標準で実装されている事がある。単体であればかなり、高速なので簡易なスクレイピング(特定のページ内からの取得など)ならBeautifulSoupを使わずlxmlで十分である。Mechanize上記のrequestsとBeautifulSoupくらいの機能ならMechanizeで十分間に合ったりする。Mechanizeは元々PerlによるWebスクレイピングツールで、ブラウザをエミュレートして操作する事ができる。最低限「何かにログインしてフォームを入力して情報を出してスクレイピング」ならMechanizeでよい。browser.open(URL)#HTMLを表示print(response.read())urllib2ベースな使い方もできる。mechanize.urlopen("http://www.example.com/")print(response.read())デフォルトでrobots.txt等スクレイピング禁止事項を読み込んでエラーを返してくれるのもありがたい。(外す時はbrowser.set_handle_robots(False)とする)BrowserのaddheadersでHeaderの追加、その他cacheの設定もできる。標準的な要素指定だけでなく、form()やsubmit()ができるのがエミュレートしてるmechanizeの利点でもある。http://wiki.kurokobo.com/index.php?Python%2FmechanizePyQuerymechanizeに似た、BeautifulSoup等より簡単にWebから情報を取得、かつjQueryライクなAPIを提供するパッケージとしてPyQueryがある。導入はpipでできる。PyQuery(url='hogehoge.com')print(pq)引数にhtml形式のテキストを投げても良いし、urlパラメータにurlを投げればWebサイトを取得する事ができる。print(q.text())かなり簡単。普段からjQuery書いてる人はこれが親しみやすいかも。中身で使われているパーサはlxmlなのでlxmlのインストールも忘れずに。@Scaled_WurmRobobrowsermechanize、PyQueryと似たパッケージとしてRobobrowserが存在する。RobobrowserRoboBrowserの特徴として「Browserを操作するようにコードが書ける」点がある。"utf-8"})順序よく書けるだけでなく、フォーム入力やスライドバーの操作などが直感的に書ける。決まった操作を自動化する場合などに良い。documentationSelenium.webdriverとPhantomJSrequests、MechanizeだけではJavaScript等動的な表示が進むタイプのWebページは上手く取得できないので、ブラウザ経由でhtmlを取得する。そのためにSeleniumとブラウザを直接Pythonから触る方法利用する。http://selenium-python.readthedocs.io/Seleniumはブラウザオートメーションツールで、そもそもWebサービスのテスト用の統合ツール。Webスクレイピング用ではなく、その為のメソッドが豊富な訳ではないが、今のところこれしかないのでみんな使っているという感じはある。Pythonバインディングもあってwebdriver経由でブラウザを操作することができる。seleniumPhantomJSFireFox等の既存ブラウザも操作できなくないが、いちいちGUI開くと重いとかいうアレがあるのでPhantomJSなるWebkitベースのヘッドレスブラウザを使う。(かなりバギーである)。使った感想だと次点でCasperJSが良い(Seleniumからの操作もできるが中身がPhantomJSなのであまり変わりはないが)。http://yukidarake.hateblo.jp/entry/2014/09/12/204813各headlessブラウザをまとめたRepositoryもgithub.comSeleniumから利用できる、各ブラウザの関係性等は今のところ以下の記事がわかりやすくまとまっている。qiita.com最近jsによる動的なWebページがめちゃくちゃ多い事もあって、スクレイピングでのJS実行環境は作るべきではある。(専用の色々一緒に作りたい人居ないかな...)PhantomJSはWindows環境下だと少し面倒(PATHとかexeプロセスの処理とか)。Linux環境なら以下で導入できる。--versionWin環境ならexeを落としてきてPATHを通せばある程度は動く。Thread環境で動かすとゾンビプロセスになりやすいので注意が必要。htmlの表示print(driver.page_source)前述のrequestsと同様timeoutを設定する必要がある。細かくセットするなら以下のようにセットできる。デフォルトは全て30秒となっている。30色々なWeb記事を見ると「ページを読み込むまでtime.sleep()を設定しよう!」というものがあるが、selenium.webdriver.supportを使う事で、ページのロード待機や操作の最大TIMEOUTを設定できるので、上記詳細設定が不要な場合はこちらを利用する。作業が終わるまで待つdriver_wait.until(ec.presence_of_all_elements_located)Exceptionが発生するのでcatchすればよい。ページのロードが終わると、Webページがリダイレクトされ別のサイトに飛んでいる場合がある。urlを適宜確認して、リダイレクトが発生してないか確認する実装が必要である。driver.current_urlここまでで「じゃあrequests要ら無くない?」となるが、seleniumのwebdriverはstatus_code取得が実装されていない。スクレイピングだと問題なのだが「本来Seleniumはテストツールであり、幾回かHTTP通信を行っている。そのため完全なstatus_codeの取得およびそれに伴った改修は難しい」といった議論が既にある。Overflowそこで後述するようにstatus_codeの取得やencodingの取得をrequestsで別途行ったりするのが良い。PhantomJSを実行する際には、requests同様User-Agentの設定等を行っておくと吉。desired_capabilitiesにブラウザ設定を、service_argsで引数を設定できる。スクレイピングで重要そうな設定は以下のような感じ。service_args=args)中でも引数に利用する--script-encoding辺りが厄介で、scriptさえencodingできずWebスクレイピングできないといった場合を見越して事前にセットする必要がある。ここのencodingの取得の為に、別途requestsで投げるのが良いのではないかなと思う。ちなみに利用できる引数のリストはここ。PhantomJS他にもログ出力の設定やweb-securityの指定ができる。あとPhantomJSにはdriver.close()なるメソッドがあり、これによってdriverのProcessを殺す事ができる。クローズしないとメモリをガバガバ食っていくのでちゃんとクローズしましょう。driver.close()PhantomJSを利用していると多々あるのが、driver.close()の失敗、driver.get()が全てErrorに、といったProcessのゾンビ化の問題である。killを定期的に実行するだけだが、まあまあ面倒。Chromeなるものもあって、開発が停止されたもんだと思ったら最近日本語記事が更新されてビビる。https://developers.google.com/web/updates/2017/04/headless-chrome?hl=jaそして油断している間にPhantomJSのメンテナが辞める。Chromeを使う記事も自分で書きました。(PhantomJSよりこっちが良いです...)vaaaaaanquish.hatenablog.com今ならこのあたりが分かりやすいです。CYOKODOGまたFirefoxも。vaaaaaanquish.hatenablog.com記事最後にFirefoxもheadlessに対応した旨等の経緯を書いていますが、Chromeが現状最高です。urljoinなるWebスクレイピングに必要な関数が統合されたので一応書いておく。urljoinはよしなにURLの操作をしてくれる。URLのドメイン部が欲しい場合は以下のように書ける。parsed_url.netlocparamsを切り離さないurlsplitもあるので適宜活用すると吉。http://hogehoge.com/main/index.htmlこの辺りurlib以外でもっと便利なメソッドが多いのでチェックしておくと良い。cchardetによるエンコーディング検出Webスクレイピングをしている際に非常に厄介なのが多岐に渡る「エンコーディングの種類」である。utf-8以外のWebサイトみんな地獄で呪ってやるという気持ちになる時もある。cp932なMicrosoftもIBMも絶対許さんという気持ちになる時もある。ちなみにrequestsはデフォルトで一応、encoding推定が動作する。2616のデフォルト値である)。documentationhttp://d.tpdn.kim/2014/10/11/python-requests-mojibakerequestsでは上記代替としてapparent_encodingなるメソッドも用意されている。#文字化けしないapparent_encodingの中身はchardetで実装された文字エンコーディング推定。detector.chardetはよくできたエンコーディング推定器であるのだが、中身がPythonで処理が重い。Webスクレイピングの速度に耐えきれない程重い場合があるので、C実装のcChardetなるライブラリを利用すると吉。encoding)以下にもあるように、Python2系の頃はエンコーディングに関して色々なパッケージがあったようだが、ユニコード問題も解決し今のところはcchardet一強かなという感じ。cssutils」は成功する。pykfencutils.tryEncodings(html)pykf.guess(html)pykfは文字コード変換ツールであるので、利用の仕方によっては強い面があるが、若干重いのが欠点である。pykfをインストールしてみたencutilsはgetEncodingInfoがCSSの中身を見に行っているため、Webサイトならかなり高い確率で正答する。parseString等のメソッドがあり、CSS特化のパッケージではあるものの場合によっては採用できる。これまでの事も含めて、requestsでstatus_codeの確認とcchardetによるencodingの検出(ISO-8859-1以外のContent-Typeを利用しつつ)をして、WebDriverに渡しましょうというコード。"html5lib")print(soup.get)多分これが一番つよいと思います。timeout_decoratorによるタイムアウト上記のような設定をしても、複数のWebスクレイピングを回している時にはSocketの不足やHTTPメソッドが返ってこない等によるPythonのフリーズが発生する。PhantomJSにせよHTTP通信を使っているメソッドは、通信状態によって設定したtimeoutを無視して周り続けたりゾンビプロセスになってしまう場合がある。デコレータで関数にタイムアウトを実装できるtimeout-decorator使う。timeout-decoratorデコレータでtimeout_decoratorを付けてあげると良さげ。使えそうにないが、概ね良さそう。anything.スクレイピングではネットワーク環境などによって、サーバへのアクセスが失敗する可能性がある。そこでretryingデコレータを利用する。retrying関数内のExceptionをcatchして、最大10回リトライするような実装は以下。scraping("http://hogehoge.com")リトライ時のdelayもwait_fixedで指定できるので有用。threadingで並列処理PythonでWebスクレイピングするなら並列、もしくは非同期処理が必要になる事がある。multiprosessing、"非同期処理"ならasyncioを使うと大体良い(正確にはどちらもできる)。それぞれの違い、及びasyncioの手引はicoxfog417氏の下記記事が最も分かりやすいと思います。http://qiita.com/icoxfog417/items/07cbf5110ca82629aca0asyncioはPython3.4から標準化されたパッケージで、最初こそ不安定さでissueだらけだったのだが大分安定的に並列処理できるようになった模様。若干の記述のしにくさ、拡張のしにくさがある。同様にPythonの標準モジュールにthreadingがあるが、1つ1つ継承したクラスを作ったりと若干記述が面倒である。requests-futuresを使うのが吉(後述)。url_list)p.close()この場合引数がリストになってないといけないので、リストのリストのような状態になる場合がある。実践的にPoolを作ってQueue,Pipeで処理するなら以下が参考になる。Blogmultiprocessingはclose()しないとガバガバメモリを食い続けるので気をつける必要がある。joblibこちらの方が記述が簡単であり、子プロセスの自動削除など使いやすさがある。n_jobsに-1を指定すれば使えるだけプロセスを使ってくれるし、1にすれば1Threadで普通に処理できるのでテストもしやすい。url_list)ただjoblibは反応しなくなる事がまれにあるかなと使っていて感じた。(多分各プロセスのマージ処理がかなり重たい)以下記事ではmultiprocessingの方が高速という話もある。requests-futures非同期なHTTP通信を扱うライブラリ群は多々ある。aiohttpaiohttpはasyncioを用いながらrequestsに似たAPIを使って情報を取得するライブラリ。記述が簡単で、基本的なrequestsらしい操作に対してデコレータの設置とyieldを書いてやればよい。リクエストの時間をコントロールするにはsemaphoreを使う。Synchronizationで同期中にあるコルーチンが動く数を制限する事ができる。url_list]))記述面で少し制限される部分があるが、適切にsyncioを振り分けられるので良い。パラメータが少し少ないのがネックではあるが、asyncioの中でPhantomJSの起動と停止を書いてやるだけで、よしなにやってくれる非同期処理が可能である。以下gitのサンプルはめちゃくちゃ充実している。GitHub日本語の記事は以下の記事くらい。POSTDgrequestsgrequestsは非同期ネットワーク処理が可能なgeventにrequestsを乗せたライブラリ。print(x.text)はあ簡単。sizeで処理数の指定もできるし、基本的にrequestsと同様に扱える。JSの実行が不要ならこれで十分そうですね。返るリストの失敗した箇所はNONEな注意すれば、requestsと使い方が同じで慣れやすい。開発途上という感じなのと、日本語の記事はキツいのしかないので今後また別で記事書くかも。requests-futuresrequests-futuresはgrequestsと違って標準moduleの中の並列処理のconcurrent.futuresに乗っかっているライブラリの1つ。Indexpipで導入できる。requests_futures例えば以下のように書くだけで非同期処理が実行できる。two.result()print(response_two.content)人によってはgrequestsより直感的かもしれない。grequests同様、中身がrequestsなので引数の管理もしやすい。defined」となってしまうのでそこだけ注意したい。機械学習向けの画像データを収集したい)ような場合は、既にScrapyなるフレームワークがあるのでそちらを利用した方が早い。このフレームワーク1つで本が書ける程なので、ここでは紹介程度にしておきたい。あーだこーだ...)。CloudなるScrapy設定をdeployすれば勝手に回してくれるサービスがあったり、ScrapyだけでQiita連載書いてる人が居たりする。シンプルにScrapy入門は良いと思うので読むと良いと思います。Qiita2016年5月にPython3に対応したのですが、それまで2系でのネット記事や書籍出版が多く行われているので、注意が必要。Frameworkアーキテクチャが図としてあるので概念と紹介だけ。Pipeline」の5つが絡んで動作している。Engineが各コンポーネントのフロー制御を行い、Schedulerがスケジューリングとキューイングを行う。Classを適宜設定する事が可能。Pipelineに流し込んでDBやtext、画像で保存するアーキテクチャ。別々のコンポーネントをそれぞれ動かす事で高速な処理を可能にしており、Spidersをちょろっと書けばすぐスクレイピングを始められる事も含め非常に良くできている。パラメータの数はゆうに100を超えるので調整がなかなか難しい。サーバへの負荷が主にSleepでの調整だったり(別途記述しようと思えばできるが)と、JSを動かすにはwebdriver周りを結局自前で書くことになるので、大きめのフレームワークらしい欠点は備えている。(便利かつデフォルト設定でよければすぐ回せるので自分も機械学習用の画像集めとかには使っています)SimpleHTTPServerとThreadを使ったunittestWebスクレイピングはコードが肥大化しやすく、かつ複雑化しやすいです。テストコードを書いておくのが良いでしょう。内容については、以下に別途記事を書きました。なる資格を取るにあたって勉強したが、なかなかこの辺は難しいと感じる。分析に使う情報取得は権利的にOKだが「機械学習データこんな感じですと集めたデータをアップロード」辺りはアウトっぽい。2010年に図書館のDBに1秒Sleep入れてアクセスしたが(図書館のDBのバグが問題で)負荷になってしまい警察に呼ばれた人の話。控えめに言って、この時のインターネットの盛り上がりはすごくてTwitterも2chも以下のブログの虜だったので実際一回は全体眺めるのを勧めたい。1997年にメタオークションサイトを作るためebayサイトを1日100,000回叩いたら動産不法侵入になった話(Wikiがある)。https://en.wikipedia.org/wiki/EBay_v._Bidder%27s_Edge最終的に2001年に金で和解したらしいけど、その時の金額は個人で払えるレベルのアレじゃないっぽい。コーディングする前に設計上で他の作業と並行させるとか、出来る工夫は沢山あると思うのですべき。スクレイピングだけ切り離すと突然家に警察が来てもおかしくないなというグレーなやつ。技術的なルールと各規約の読み込み技術的なルールもあるのでまとめておく。これは遵守したいところ。metaタグを守るクローラへの指示が示されている(アクセス禁止のパスとか)見つけたら守る必要がある読まなければ営業妨害になる可能性HTMLにPragma:No-cacheとなっていたらデータ収集しないaタグにrel="nofollow"が設定されていたら辿らないUser-agentなどをきちんと設定しIP偽装等をやめよう追記で規約周りの読み込み記事を書きました。vaaaaaanquish.hatenablog.com「スクレイピングの間隔はどうすればいい?」「規約は?」「違法でないの?」という人のために法律等もまとめています。見る正直基本的な事だけならこれ一冊で良くねと思えるバイブルっぽい良書。Pythonの基本的な事もそうだが、Unixコマンドも多々解説しており、基本的な事が出来るようになる流れで書いてある。(まずはwgetしてgrepしてjqで~とか、Pythonならやりたい事別にこうしてとか~)robotsに対する処理とか、負荷のかけかたも実践的なコードがある。紹介、SPARQLのBigQueryの利用方法等が1章分ある。この本の良い所はScrapyを1章まるまる使って解説している所にあると思う。あのクソ多いパラメータを重要な所だけ抜き取って書いてくれてるので、Reference読む前に読んでおくと楽。Scrapyの中がどう動いてるか理解できたのはこの本のおかげ。クローラの継続実行に関する解説もあり、Linuxへの理解もちょっと深まる。見るこれも日本語の書籍の中ではオススメできる本です。新しい書籍なので当たり前ですが、Python3.6への対応や、実在するWebページに対するスクレイピングの例、Sampleソースコードのダウンロードができます。curl等のコマンドやgit、正規表現、MySQLの話、プログラミングの基礎みたいな話が3章まで続き、やや蛇足感がありますが、4章以降はしっかり例が示されており初心者に分かりやすい構成になっていると思います。取ってきたデータのXML、CSVへの変換やテキスト情報の抜き出し(w3lib)、webdriver、並列処理、loggingの記載、長めのScrapyの話があります。API化して運用する構成の話など、やや蛇足かなと思う部分も多いですが、著者はGunosyの方だそうで、実務で得られた経験や知見を活かしながら書かれた本だと思います。実務で突然スクレイピング始めろって言われたら買っておくといいです。単行本(ソフトカバー)この商品を含むブログを見る2章まで、Pyhonの使い方(インストールからprint関数の利用、四則演算とかそういうレベルから)が書いてあって、かつ2章までで書籍の4割くらいを使っている。スクレイピングに関する話は中の数章で、WebAPIの利用、SPARQL、スクレイピングサービスのkimonoの紹介という感じ。加えて法律とrobot.txtに関する話がちょこっと程度。最後4割はExcelとAWKコマンド、Pandasの使い方が載ってる。あまりに知見が少なく、説明も痒いので正直かなり厳しい。著者の情報を見るにそれなりのエンジニアっぽいコミュニティや受賞を持っているようだが果たしてこれは...という感想。見る「絶対これ機械学習エンジニアが書いたでしょ...」ってなる。2章までが主にスクレイピングの話で、確かにrequests+BS4+Selenium+PhantomJSを使った実践的なコードと、cronの操作、WebAPIの話が書かれている。(本当に基本的な所までが連ねてある感じで書いてある)残りの6~7割程度が本当に機械学習の話しか載っていない。sklearnからTensorFlow、MecabとCabochaによる自然言語処理、ベイズ、マルコフ連鎖の実装、OCRやCNNでの画像認識...とかなりの実践機械学習本。スクレイピングの知見含めて正直Qiita等で間に合うレベル感の内容なので、「PythonでのWebスクレイピングから機械学習を使った分析まで全体感を見ながら通しで勉強したい!」という人には向いているかも。スクレイピングとは機械学習とはなんぞやという人が読めば、確かに世界が広がりそうな流れの書籍にはなっている。あと、サンプルコードがダウンロードできるようになってるのも良い点。Kindle版この商品を含むブログを見るPythonを勉強した後、スクレイピングをとりあえず試したいという人向けなレベル感の書籍。OCRによる画像から文字抽出する部分辺りはスクレイピング本としては余計に感じた。requestsとBeautifulSoupを扱っているが、めちゃくちゃ有益な知見とまではいかなかった(Qiitaやブログ記事でカバーできそう)。順を追って色々勉強したいという人向けである。良いところを挙げると、本記事には乗せていないPySocksを用いた、Torによるスクレイピングの匿名化の話等が書いてある。Python.また、ハニーポットをどういう風に避けるかみたいな話もある。付録の事案紹介や倫理の部分は丁寧で、実際に弁護士に伺った部分があるとの事。事例が国内外解説してあって「日本法とアメリカ法は違うのでおおよそでも良いから読んだほうが良い」とのこと。英語版も似たような内容。英語版筆者が元々Webスクレイピングより分析の仕事をしていたようで、まあそこに寄ったのかなって。見るJavaの本なので基本的にこの記事の趣向とは離れるが、HTTPや各認証の仕組み等について触れられて居るので良い。クローリングとしては、JavaとSeleniumを用いた基本を抑えつつ、その仕組みを重点的に抑えている書籍。ビズリーチ社の社員が複数人で書いているため、章によって情報のバラつきが激しいのがちょっとネックだが、一歩踏み入った勉強ができる。単行本(ソフトカバー)この商品を含むブログを見るスクレイピングとしての書籍ではないが、「スクレイピングした後に機械学習をやりたい!」という人には絶対オススメ。モデルの使い方が丁寧に書かれており、「Pythonによるスクレイピング&機械学習」を単体で買うよりは、この書籍とスクレイピング専門の書籍を1冊ずつ買うほうがお得。話題のバースト検出やウェブのリンク解析等、幅広く業務に応用できる内容が書かれていると思う。Kindle版この商品を含むブログを見る実践というより、Webに関する知見な書籍。Pythonがある程度書ける前提を持った人向けの書籍で、その分レベルは実践に近い(しかしPython2系)。cacheを使って帯域幅を削減する方法や、スクレイピングの並列化、リンク走査の話辺りはかなり良い。クッキーやブラウザレンダラの話は知見として有益な部分が多い。それらのコードも載っているのだがPython2系なのが辛いところ。あと「Pythonクローリング&スクレイピング」と同様、6章まるまるScrapyの話をふんだんに書いてくれているので、Scrapyの設計を理解するには使えそう(しかしPython2系)。Pythonコードは少なめだが丁寧ではあると思う(しかしPython2系)。以外と知見が散りばめられているので、値段にしては有益な書。Kindle版この商品を含むブログを見る多分邦書洋書含めた中でも最も実践的で丁寧な良書。PhanotomJSとScrapyの解説が載っているだけでなく、キャッシュの利用や発生しがちなExceptionの解説、SeleniumとPyQtによるGUI操作にまで及んでいる。robot.txtのparseや、python-wohoisで取得先の情報見ましょうとか、「普段みんなスクレイピング周辺でどんな事してるの?」という疑問に対して痒い所まで手が届いた良い書籍。コードがGithubにあるのも良い。Pythonhttp://amzn.to/2gHR3syURLだけ一応貼っておく。文書の前半がPythonのインストール、エラー処理、四則演算といった内容。後半は本当にQiita以下の内容。筆者を見ると、Qiita以下のクソ電子書籍を適当に出しまくってるオッサンらしいので本当クソ。いう本全部Amazonに報告するスクリプト書きたい。おわりになんか色々書いてるうちに本が書けるくらいの量になってしまった...Referenceも結構読んだので、それぞれのライブラリ毎にまた記事が書けると良いなと思っている気がします。あと最後ですがこれ大事です。気軽にはじめたい人はScrapy。ブログにはScrapy苦手と書いたけど、最も気軽に始められるセットは個人的にこれを買ってScrapyから入るのが普通に良いと思います。Python2.x系のネット情報にさえ注意すれば。2018年1月9日Seleniumに変わるスクレイピング向けのPythonモジュール作りたい人居ないかな~。mwSoftあと他にこの書籍とかツールマジいいよ!ってやつあれば教えてくださいな。User-Agentについて「UA偽装をやめよう」「よしなにUA書こう」という背反した記述があると指摘がフレンズからありました。「確かに」以外の感想が得られなかったので修正しました。User-Agentに自身の正しい情報を乗せるだけでなく、自身の連絡先等乗せてスクレイピングするくらいが紳士的ですね。以下のような話も読んでおくとよさそう。-スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。