オライリーの「PythonによるWebスクレイピング」でスクレイピングをしているのですが、良書だとは思うのですが、
記載されているコードが動かなかったり、紹介されているサイトがなくなっていたり、言語の最新の仕様と違かったりと勉強を進める上で問題があると思いました。
2016年初版なのに、Pythonの進化はすごい!
ですが、私のような最近勉強をはじめ、Python3しか触ったことがない人にはPython2との違いもよくわかりません。
なのでPython3を使ってこの本のコード例を実行するためのポイントを書いていきます。
私自身が詰まるたびに調べて、実行してを繰り返したので、模写しても動かないじゃん!っていう人には参考になると思います。
スポンサードサーチ
SSLの対応が必要
BeautifulSoupやScrapyでスクレイピングする手法が紹介されているのですが、コードを模写しても動きません。
以下のようなエラーが出ると思います。
理由はスクレイピングの対象になっているWikipediaはSSL化されているからです。
SSL化したサイトのデータを取得するには、以下の処理を追加する必要があります。
1 2 3 |
import ssl ssl._create_default_https_context = ssl._create_unverified_context |
freegeoip.netが使えない
書籍内で紹介されるIPアドレスから地理情報を割り出す「freegeoip.net」は現在アクセスできません。
なので代わりに使えそうなサイトを紹介します。
私は、ipstackというサイトを代わりに使用しました。
使用するには、無料の会員登録をする必要があります。
登録後、API Access Keyが発行されるので、そのキーとIPアドレスを使います。
使い方はドキュメントを見ればすぐにわかると思います。
linkextractors.sgmlはPython3では使えない
書籍で紹介されているSGMLパーサーの仕様は、Python3ではなくなっています。
もともと、python2でも非推奨だったらしいです。
この部分は、コードのsgml、SGMLの箇所を削除すれば、linkextractorsを使用することができます。
1 2 3 4 5 6 7 8 9 10 11 12 |
修正前 from scrapy.linkextractors.sgml import LinkExtractor ↓ 修正後 from scrapy.linkextractors import LinkExtractor 修正前 rules = [Rule(SgmlLinkExtractor・・・・・・・ ↓ 修正後 rules = [Rule(LinkExtractor・・・・・・・ |
PhantomJSは2018年に開発終了
SeleniumでPhantomJSを使用する方法が紹介されているのですが、PhantomJSは開発終了、つまり今後アップデートされることはありません。
なので、書籍のコードを実行すると、以下の警告が出ます。
「PhantomJSのSeleniumのサポートは終了しました。Headless ChromeかFirefoxを使用してください。」というようなことを言われます。
インストールも実行もできるのでコードを試す分には問題ありませんが、開発終了ということは知っておいた方がいいと思います。
読み終えた感想
スクレイピング全般について紹介している書籍なので、コード例も多く、色々なことを実際に試すことができます。
広く、浅くですが「スクレイピングとは?」といった方には最適な書籍だと思いました。
構成は前半はスクレイパーの作り方で、後半はライブラリやツールを実践的なスクレイピング方法の紹介になっています。
これは読めば簡単なスクレイピングは実行できるようになります。というか実行自体は簡単にできます。
厄介なのは正規表現の方ですね。慣れてないと何を書いてあるのか、全くわかりません・・・・。
このサイトで正規表現がうまく動くかチェックすることができるので、正規表現の勉強に役立つと思います。
Pythonについての紹介はインストール方法くらいなので、基礎的なことを身につけてからこの書籍を読むことをオススメします。
とは言ってもPython独自の仕様みたいなものはあまり出てこないので、Pythonを知らなくても他言語の経験があれば、多分大丈夫です。
スクレイピングは禁止しているサイトもあり、注意点が多いですが、楽しい技術なので気をつけてやりましょう!