読者です 読者をやめる 読者になる 読者になる

PHPやるお

うおおおおおおおおお!

PHPのsimple_html_domでスクレイピングするとき「file_get_html」ではなく「Curl」を使ったら取得実行時間が半分(2倍速)になった

明治 カールチーズあじ 72g×10個

cURL(カール)を使いこなしている人からしたら「当たり前のこと」なのだろう。
人様のコードをコピペしただけなので理屈でもって説明できない。(理解していない)

が、たしかに自分の実行環境では実行時間が半分(2倍の早さ)になった。
キャッシュじゃない。何度も確かめたけど結果はおなじ。驚いた。

参考にしたサイト

きっかけは、以下のブログ記事。ユーザー関数。

PHPメモ : file_get_contentsの代替にcURLを使う – Mach3.laBlog

おれがスクレイピングに利用していたのは「file_get_html」という「simple_html_dom.php」のヘルパー関数。
おれのケースの場合、「file_get_html」と「file_get_contents」を比べるのは、そもそも間違っているのだのだが、とにかく「Curl」で取得したほうが速いらしいというのを聞きつけた。やってみたくなった。

cURLの挙動について調査 –file_get_contents()との比較- | e2esound.com業務日誌

で、いろいろ調べたら、海外サイトに良いコードがあったので丸々っとコピペ。

how to use CURL and PHP Simple HTML DOM Parser with object - Stack Overflow

$urlが、スクレイピング先のURL、
$data が、simple_html_domで本来file_get_htmlしたときに生成されるDOMオブジェクトになる。

自分のスクレイピングコード用に「変数名」と「ユーザーエージェント部分」をカスタマイズして実行したら、うまく動いた。そして、2倍速い。シャアザクには及ばないものの、ありがたや。