pagetaka

写真、PC、ネット、岡山、旅の話題をお届けします

PHP:WEBスクレイピング

Webスクレイピングとは (Web scraping) ウェブスクレイピング: - IT用語辞典バイナリ」をやろうともがいている(≒あがいている)爺です。使っているのはPHPです。

これまでのまとめと、この先の課題をまとめておこうかと思っています。

自サバではおよそできた、PHP配列ポインタ、DOM、正規表現などで苦労した~

自サバでは、いくつかのサイトを巡回し、狙ったタグを目印に、タイトルや平文を抜き出すのを自動的にできるようになりました。

作業で苦労したのは次のようなことです。

PHP配列ポインタの理解に時間がかかった

爺は、1980年代中盤以降しばらくの間、N88-basicをやっていました。「for i=1 to 800 step 1」というような世代であります。配列もA(x,y)というように、いずれも明示的に数字で示しながら使うというフルーイ体質…。その後、VBAをやって今日に至る…。
今回、PHPをやってみて、配列のポインタが今どこを指しているのかというようなことに一番苦労したです。「オブジェクト」というつかみ方もやはり苦手…。

DOM

これは、正規表現に該当する以外のところは比較的楽でした。HTML、CSSの苦労はこれまでにかなりしてきてますので、今回は、ラクでした。HTMLソースを表示し、どのタグ・要素にポイントを絞ればスクレイピングしやすいか、という判断は、適宜できたのではと思います。構造言語としてのHTML…。
ただし、aタグhref要素につけるURLに囲みの「"」がないとか、URL末尾に「?」と英数文字がたくさん自動的についてきて、など、人間のすること考えることが一筋縄ではいかないのだと思い知らされました。

正規表現

これは、文字検索の一手段、文字抽出の一手段、と考えれば今回はOKかと思います。
N88-basicであれば、検索ヒットのロジックを自分で考えて作っていたのですが、現在はある意味ブラックボックスに対象文字列をほうり込めば、答えが出てくるということで、ありがたいです。
その「検索」「抽出」のキーになるのが、抽象的に文字の並びを定式化し、ヒットさせる、というトコロです。結果的にはURL抽出ではドンピシャのところまでいきつけず「近似値」でパタリ。
そして、「近似値」を、PHPの文字列関数をつかって処理~。これは、N88-basic、VBAなどの知識が流用できました。

MySQL、自サバ

データベースは、職業訓練所でMicrosoft系のでしたが、習ったので、入口で躓くことはありませんでした。SQL文をPHPに置き換えたり、PDO接続という方法がセキュリティ対策として良いことなど、経験が少ないとかほぼゼロというのが、ちょっとネックになりました。
自サバは、これまでも何回か設定していますのでOKでした。XAMPPでほぼ問題ありませぬ。
サーバー占有30秒ルールとの付き合い方も、正面からではなく、折り合いをつける、という方法で見通しをつけました。

今後の課題

これからレンタルサーバに移植するのに際し、いくつか課題も見えてきています。

PHPスクリプトの書き直し

無駄な動作が無いようするためのPHPスクリプトの書き直しが一番の作業です。また、自サバだからできた、というようなことがレンタルサバでできない、ということが起こることかと思います。これをクリアしないとね。

セキュリティが気になる

現在、http://127.0.0.1/a.php をブラウザのURLのところに打ち込んでPHPを使っています。これが、レンタルサバになると http://x.jp/a.php などというようなことで稼働することになる…。つまり、URLがわかればだれでも稼働できる…。そうだとすると、それはイケマセヌ。これを設定したCRONだけが動かす、というようなことにならんとイケヌのかと。
また、いくつかのPHPスクリプト・ファイルにわけて稼働しています。a.phpからa1.phpを呼び出し、続いてb.phpに移動し、などという具合に…。途中のスクリプトを呼ばれたらどうなるのかということも考えておかないとね…。

WEB画面(ブラウザ)で入力するのにはPOSTなどが使われますが、今回はありません。
phpMyAdmin画面で直接、チェック対象とするサイト代表URLなどを入力しています。これは、レンタルサバの場合ログインのために関門がいくつかあるので大丈夫だろうと想像しています。

サーバ接続30秒ルールは、一巡時間を短くするため、1サイトあたりの取得件数を絞っています。これが妥当かどうか、どの程度のサイト数までエラーが起こらず運用できるか、時々確認が必要になるかと思っています。

DB接続はPDOだけでおこなっていますので、一般的な方法よりは安全だろうと思っています。さて、気が付いてないセキュリティ問題はないのか…ネット徘徊しながらチェックしていきたいと思っております。

さて…。