paiza開発日誌

IT/Webエンジニア向け総合求人・学習サービス「paiza」(https://paiza.jp ギノ株式会社)の開発者が開発の事、プログラミングネタ、ITエンジニアの転職などについて書いています。

Python・PHP・Perl・Bash・Rubyで簡単にWebスクレイピングする方法を解説する

f:id:paiza:20180803164805j:plain
Photo by Ted Eytan
秋山です。

最近PythonでWebスクレイピングしたりする記事をよく目にする気がするので、私も書いてみようと思います。

ちなみにPythonはNumpyやPandasなどの分析に便利なライブラリやツールがあったりするので使いやすい部分はあると思いますが、「Webスクレイピングに向いてる言語はPython!」というわけではありません。

スクレイピングは別にPython以外の言語でもできますし、むしろ単純なデータの抽出程度なら無理にPythonを使うよりも、自分がふだんからよく使っている言語でやったほうがよいかと思います。

今回は、Python・PHP・Perl・Bash・Rubyを使って、Webスクレイピングを試してみたので、各言語でのやり方を説明していきます。

■Python・PHP・Perl・Bash・RubyでWebスクレイピングする

今回、作業としては「このブログの右メニューの最新記事タイトルを取得し、タイトルとURLとセットで出力する」という単純なWebスクレイピングをしてみます。

また、可能な限り外部ライブラリに頼らずにやってみました。(※普通に外部ライブラリが使える環境をお持ちの方は、外部ライブラリにどんどん頼ってよいかと思います)

それぞれの言語を使って上記作業をできるだけシンプルに実現する方法と、さらにもう少し踏み込んでいろいろな作業をするなら…というところも補足していきます。

■Python

RequestsというHTTPライブラリ(入ってない場合はpipで入れてください!)とPythonの標準のHTMLParserを使って、自前でHTMLパースを雑に行ってみるとこんな感じです。

標準なのでHTMLParserを使ってやってみました…が、自前でHTMLParserをごそごそするよりは、 lxml もしくは Beautiful Soupを使った方がスマートにできるかと思います。

■PHP

PHPの場合、外部ライブラリに頼らず http:// でHTMLを取得 ~ DOMDocument として読み込み ~ XPathを使ったデータの取り出しまでが行えますし、コードもこんな感じでシンプルですね。

少なくとも書捨てのデータ取得なら、PythonよりはPHPの方が向いているのでは?という気がします。歯ブラシと言われるだけのことはありますね。(※PHPの開発者であるラスマス・ラードフ氏の発言

XPathに関しては他の言語でも使えるようにできるライブラリもあり、スクレイプする上ではかなり有用です。詳しくは以下のドキュメントなどで学べるかと思います。
XPath 構文

■Perl

Perlの場合、HTMLをパースしてもよかったのですがpaiza.IOでは使えない…ので、今度は正規表現でほしいデータを引っ張ってみました。

■Bash

Bashの場合、grepでがんばる感じですね。Perlと同じ正規表現を使っています。

Xpathがインストールされているなら、PHPと共通のXPathをコピペすればgrepの代替になります。

ただちょっとデータを取りたいだけ…という場合は意外とアリなのかもしれません。

■Ruby

paiza.IOにはスクレイピングするときに便利なNokogiri が入っているので楽ですね。(逆にデフォルトだけだとRexmlしかない感じなので、HTMLをパースするのは厳しいですね)

今回はNokogiri を使いましたが、Rubyだと Oga なども便利ですね。

途中でブログパーツとして使ったオンライン実行環境サービス「paiza.IO (パイザ・アイオー)」はこちら

■まとめ

というわけでPython・PHP・Perl・Bash・Rubyを使って、Webスクレイピングを試してみました。

今回は可能な限り標準ライブラリを中心にやってみましたが(RubyはNokogiri使っちゃいましたけど)、Go言語などの場合は外部ライブラリに頼ったほうがよさそうです。

とりあえずいろいろな言語を試してみて、ただデータを取得したいだけなら、PHPが一番楽なのでは?と思いました。

ただ、取得後にいろいろな処理を加えたいのであれば、Pythonなどで取得した上でPandasやデータフレームに入れる…というのがよさそうです。Bashとかでデータ取得して、それをファイルに吐き出させた後、別の言語で処理をさせる…というのもアリな気がします。


この辺の記事でもPythonを使ってWeb上からデータを取ってきていろいろしていますので、興味のある方は見てみてください。
paiza.hatenablog.com

paiza.hatenablog.com


動画でプログラミングが学べるpaizaラーニングでは、新たに「Python×AI・機械学習入門編」が追加されました。

人気声優の上坂すみれさん演じる進行役のスベトラーナ・小百合・ベレフスカヤと一緒に、実際に画像認識技術を使いながら、初心者でも機械学習を体験・学習できるレッスン内容になっています。

Python×AI・機械学習入門編は全編無料でごらんいただけます。詳しくはこちら





paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。

詳しくはこちら

paizaラーニング

そしてpaizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。

スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。

詳しくはこちら

paizaのスキルチェック