はじめに
どこかに書いた気がしますが、実は私の本業はSystem Engineerです。SEとかProgrammerというと、パソコンを使ってなんでも色々できちゃう人のような気がしますが、残念ながら私はそうではないので、少しでもそう言う世界がわかるようになりたいなと思い、少しずつ流行りのプログラムを触ってみることにしました。
プログラミングとアルゴリズム
世の中では、その道の人でもプログラミングとアルゴリズムをあまり明確に区別していないことの方が多いと思いますが、実はとても大きな違いがあるので、まずはそれを整理しようと思います。
アルゴリズムというと普通の人は何をイメージするのでしょうか?なんだか難しげな横文字ですが、私に取ってはこれは手続きを意味します。つまり、何かを実現したいとなった時に、まずAをやって、次にBをやって、Bの結果によってはCまたはDをやって、最終的にEを得る。みたいな、そんな、一つ一つの「やること」を順に並べていって、一つの結果を得るこの手続きを「アルゴリズム」と私は考えています。
一方で、プログラミングとはこれをパソコンなどのコンピューターが実行できるように何らかのコードを書くことを指します。つまり、プログラミングとは、自分の考えたアルゴリズムを自分の好きなプログラミング言語で実装することを指します。
なぜPythonか
なぜPythonかというと、あまり積極的な理由はありませんが、スクリプト型の言語であることの使いやすさと、今流行りの言語なので何か情報を得ようと思った時に情報にアクセスしやすいという点、さらにはBig dataなどのデータ解析に向いているというもっぱらの噂なので、まぁ、これかなといった感じでした。職場ではRubyを使っている人も多いようですが、何となくPythonにしました。
やってみた感想は
上記の通り、私のプログラミング経験は、主に学術計算用のものと、その後SEとしてシステムインフラを維持管理するためのもので、あまりWeb ScrapingなどのWebサービスを対象としたものはほとんどやったことがなく、プログラムからOSコマンドもしくは、なんらかの管理ツールが公開している外部コマンドを実行してその結果を取得するぐらいのものでした。
よって、Web Scrapingなどはそもそもどうやったら実現できるのか全く見当がつかないレベルでした。そんな私ですが、週末二日間かけて、Pythonの基礎的な使い方と、これまでの私の経験とはあまり関わり合いのなかったオブジェクト指向の考え方をPythonを通して軽く学び、いくつかのサイトを当たりながら、多少のトラブルシューティングなどもして、何とか初心者ながらWeb Scrapingの基本的な考え方を理解し、それをもとに簡単な情報であれば自動で取得できるようになってきました。
こんな感じの私ですが、Pythonを使ってのWeb Scrapingは一言で言うと、かなり手軽にできると言う印象です。これは、それを実現するために必要な仕組みがそもそも整っているからという話だと思います。
Seleniumを使わない場合、requestsとBeautifulSoupを使ってアクセスしたいWebサイトからHTMLのソースを取得し、それをよしなに加工するだけでおしまいです。また、そのよしなに加工するという手続きに関しても、必要な手段は既に用意されており、ほとんどのことがそれで済んでしまう。そう言う状況なので、一度でもなんらかのプログラミング言語にそこそこ真面目に取り組んだことがある人からするとかなり拍子抜けするような感じです。「まじめに」といっても私ていどの真面目さでもそれなりにできてしまうので、ガッツリやったことのある人からしたら朝飯前になってしまうと思います。
こう考えられるのはなぜかと言うと、必要なライブラリ(requests, BeautifulSoup)が既に準備されているため、実装すべきアルゴリズムが非常にシンプルになるからです。importを含めても、ものの6行ぐらいでコーディングは終わってしまいます。全くプログラミングをしたことがなく、Pythonが初めてのプログラミング言語だったとすると、こんなにすんなりとは理解が進まないんだろうなとも思います。
一方で、私にとって理解が不十分な点は、やはりオブジェクト指向の部分です。BeautifulSoupを使ってReturnを得た後、一体、そのReturnにはどんな変数やメソッドがあるのかが私にはわかっていないので、取得した値を料理するにあたって、実現したいことからいちいち検索して何ができるのかを調べているといった感じです。どこかにまとまった情報が落ちていないか探し中です。
まとめ
- 最近始めたPythonでのWeb Scrapingに関して記載しました
- 思っていたよりもシンプルで簡単にできるんだなと思いました
- プログラミングを始めることとアルゴリズムを考えることは別のことなのですが、この先プログラミングがさらに民主化されていろいろな人が自分の考えを表現できるようになれば良いなと思います
- プログラミングの足腰はアルゴリズム設計だと思いますが、プログラミングが簡単になればなるほど、この辺は一般的な人にはわからないだろうなと改めて思いました