HTTPアクセスしてスクレイピングしてみた。
最近、仕事はテスターなので
引きこもってコードが書いてみた。
HTTP Class使ってみた。
PHP用、外部接続にcURLかfsockopenが選べるHTTPクラス:phpspot開発日誌 で紹介されてた便利そうなHTTP Classを使ってみた。
しょっちゅう見るUIのひどい携帯サイトのラッパーサイトを作るのに使ってみたけどとっても使いやすい。
<?php $http = new Http(); $http->setMethod('POST'); $http->setUseragent(REQUEST_USERAGENT); $http->setReferrer( $referer ); $http->followRedirects(true); $http->setMaxredirect(3); $http->addParam( 'id', $id); $http->execute(REQUEST_URL .'class.asp' ); echo ($http->error) ? $http->error : $http->result;
cURL使わないでアクセスしたり、ベーシック認証突破できたり。
結構、使い道が多いと思う。たいした量じゃないからソース読んでもいいけど、ドキュメントもある。
PEAR::HTTP_Client使ったことないからどっちがいいかはわかんないけど。。。
不完全はHTMLのスクレイピング
取得した正規表現から正規表現で抜き出すのも面倒になっていろいろと調べていたら
「不完全なHTMLをDOMDocumentにしてSimpleXMLから簡単にスクレイピング」ができることを発見
はまりポイント
KoshigoeBLOG: PHPのDOMDocumentの文字化けなど
loadHTMLするHTMLについては、metaタグで文字コードを指定していれば正しいエンコーディングで処理してくれるようです。metaタグで文字コードを指定していないHTMLについて(一部を切り抜いたHTMLなど)は補完などの処理が必要になるのでしょうか?
パースする不完全なHTMLにmetaタグで文字コードを追加してあげたら文字化けせずに出力できたー。
<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" />
Xpathってとっても便利
PHP: SimpleXMLElement->xpath()を使ってる参考ソースを見つけて、XPath知らなかったから調べて使って見たら便利さに感動。。