WebスクレイピングのライブラリhtmlSQLの使い方メモ。
スクレイピングの準備
//Snoopyをinclude
include_once("../snoopy.class.php");
//htmlSQLをinclude
include_once("../htmlsql.class.php");
//インスタンス生成(Exampleで使われている"$wsql"という変数名は、昔はWebSQLという名前だった名残り)
$wsql = new htmlsql();
Webページからスクレイピング
if (!$wsql->connect('url', 'http://codedump.jonasjohn.de/')){
print 'Error while connecting: ' . $wsql->error;
exit;
}from Example 1
ローカルにあるファイルからスクレイピング
if (!$wsql->connect('file', 'demo_data.htm')){
print 'Error while connecting: ' . $wsql->error;
exit;
}from Example 2
文字列からスクレイピング
(文字列にconnectするというのも変だが。)
if (!$wsql->connect('string', $some_html)){
print 'Error while connecting: ' . $wsql->error;
exit;
}from Example 6
Queryの実行例
if (!$wsql->query('SELECT * FROM a WHERE $class == "nav_item"')){他にも下記のメソッドが使える
print "Query error: " . $wsql->error;
exit;
}
// show results:
foreach($wsql->fetch_array() as $row){
print_r($row);
}from Example 1
- $wsql->fetch_objects(); //オブジェクトとして取り出す
- $wsql->get_result_count(); //結果の件数を取得する
WHERE句のバリエーション
- 要素の属性を指定
- WHERE $class == "nav_item"
- WHERE $id == "header"
- WHERE preg_match("/^http:///", $href)
- 要素のテキストを指定
- WHERE preg_match("/^array_/i", $text)
- 複数の条件(orもできる)
- WHERE preg_match("/^/snippets/i", $href) and preg_match("/^array_/i", $text)
- WHERE句無しでもOK
- WHERE句の中身はeval()で実行して判定される。ユーザーの入力値をそのままWHERE句に入れないように注意。(Never trust user input!)
取得データ
- 取得した各要素について、下記のデータが配列に入っている
- 各属性
- タグ名(tagname)
- テキスト(text)
ユーザーエージェントやリファラの変更方法
$wsql->set_user_agent('MyAgentName/0.9');
$wsql->set_referer('http://www.jonasjohn.de/custom/referer/');from Example 12
その他
- httpsのWebページへのアクセスはできない
- htmlSQLの内部でpreg系の関数を使ってるが、preg系はマルチバイトに対応していない。状況によってはうまく動かないかも。その場合は文字コードをUTF-8にして、u修飾子を付ければ回避できそう。
0 件のコメント:
コメントを投稿