スクレイピング htmlsql 使い方

2014年10月12日更新 view: 788 view
photoBy: http://www.kaasan.info/wp-content/uploads/2012/08/title2.jpg

スクレイピングして他サイトのコンテンツを使う

htmlsql

使うにはまず、2つのファイルを用意する

http://www.jonasjohn.de/old-projects.htm

  • snoopy.class.php
  • htmlsql.class.php

で下記のようにインクルード

include_once("../snoopy.class.php");
//htmlSQLをinclude
include_once("../htmlsql.class.php");

//インスタンス生成(Exampleで使われている"$wsql"という変数名は、昔はWebSQLという名前だった名残り)
$wsql = new htmlsql();

使い方

基本

if (!$wsql->connect('url', 'http://www.yahoo.co.jp/')){
 print 'Error while connecting: ' . $wsql->error;
 exit;
}
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);
}

これでマッチした内容が $row に格納される。

/*
$row is an array and looks like this:
Array (
[href] => /feedback.htm
[class] => nav_item
[tagname] => a
[text][/text][/text] => Feedback
)
*/

タグや正規表現で取得

全ての h1 タグの内容を取得

SELECT * FROM h1

全ての a タグの内容を取得

スポンサードリンク
SELECT * FROM a

全ての a タグの href とテキストを取得

SELECT href as url, text FROM a

http:// から始まるリンクの a タグの内容を取得

SELECT * FROM a WHERE preg_match(“/^http:?/?//”, $href)

id = ‘hoge’ のタグの内容を取得

SELECT * FROM * WHERE $id == “header”

“/” から始まるリンクの a タグの内容を取得

SELECT * FROM a WHERE substr($href,0,1) != “/”

class=”item” のタグの内容を取得

SELECT * FROM * WHERE $class == “nav_item”

AND OR などで条件を指定することも可能

SELECT * FROM a WHERE ($href == “foo.htm” and $title == “foo”) or ($title == “bar”)

複数のクラスを持つ場合

[class] => questioner resolved-status Extends-details

SELECT * FROM div WHERE preg_match("/questioner/", $class)

hogeクラスとmageクラスの両方のdiv取得したい

if (!$wsql->query('SELECT * FROM div WHERE preg_match("/hoge|mage/",$class)')){
            print "Query error: " . $wsql->error;
        }

リファラも変更できるよ

$wsql->set_user_agent('MyAgentName/0.9');
$wsql->set_referer('http://www.hogema.com/');
スポンサードリンク

関連記事

関連カテゴリ