htmlSQL类的使用

2012年4月2日 发表评论 阅读评论

一,准备工作

//包含Snoopy类
include_once(“../snoopy.class.php”);
//包含htmlSQL类
include_once(“../htmlsql.class.php”);

//创建一个htmlSQL对象的实例
$wsql = new htmlsql();

二, 伪造来源HTTP referer,设置用户代理User-Agent信息

// 设置一个特别的代理:
$wsql->set_user_agent(‘DelozAgentName/10086′);

//伪造一个referer:
$wsql->set_referer(‘http://deloz.net/’);

三,连接有3种方式,URL,文件,字符串

连接方式1:网页抓取

// 连接URL http://mp3.youdao.com/
if (!$wsql->connect(‘url’, ‘http://mp3.youdao.com/’)){
print ‘Error while connecting: ‘ . $wsql->error;
exit;
}

连接方式2:读取本地文件

// 读取本地文件
if (!$wsql->connect(‘file’, ‘demo_data.htm’)){
print ‘Error while connecting: ‘ . $wsql->error;
exit;
}

连接方式3:字符串

//读取字符串
if (!$wsql->connect(‘string’, $some_html)){
print ‘Error while connecting: ‘ . $wsql->error;
exit;
}

四,执行查询

/* 执行查询: 提取class名为listlink的标签a 所有链接
例如: 美丽的日子
*/
if (!$wsql->query(‘SELECT * FROM a WHERE $class == “listlink”‘)){
print “Query error: ” . $wsql->error;
exit;
}

五,SELECT查询语句的结构

语法:

SELECT href,title FROM a WHERE $class == “list”

如果有条件地从HTML/XML中选取数据,可将WHERE条件添加到SELECT语句中..

WHERE可以使用的属性:

WHERE $class == “nav_item” //根据class查询

WHERE $id == “header” //根据ID查询

WHERE preg_match(“/^http:///”, $href ) //正则表达式

也可以使用字符串进行匹配查询:   WHERE preg_match(“/^array_/i”, $text )

或者多条件

WHERE preg_match(“/^/snippets/i”, $href ) and preg_match(“/^array_/i”, $text )

WHERE没有子句

六, 返回结果,并显示

取得的数据是一个数组,结构如下:

Array (
[href] => /deloz.net
[class] => list
[tagname] => a
[text] => 美丽的日子
)

//显示结果:
foreach($wsql->fetch_array() as $row){

print_r($row);

}

还可以使用下面的方法:

$wsql->fetch_objects();//把所有查询结果作为一个数组对象

$wsql->get_result_count();//返回结果的数目

七,其他事项

1,htmlSQL不适应于访问https

2,html SQL内部使用preg系,preg系不支持多字节.某些情况下可能无法正常使用,建议使用utf-8编码.

八,例子:

这个例子比较简单,主要是演示怎样使用htmlSQL类从一个网站上提取特定数据.

<?php

/*
** htmlSQL – Example 1
**
** 简单的查询
*/

//包含必须的类
include_once(“../snoopy.class.php”);
include_once(“../htmlsql.class.php”);

//创建一个新的htmlSQL对象的实例
$wsql = new htmlsql();

// 连接URL http://mp3.youdao.com/
if (!$wsql->connect(‘url’, ‘http://mp3.youdao.com/’)){
print ‘Error while connecting: ‘ . $wsql->error;
exit;
}

/* 执行查询: 提取class名为listlink的标签a 所有链接
例如: <a href=”http://deloz.net/link2.php?site=/search?q=%E7%BE%8E%E4%B8%BD%E7%9A%84%E6%97%A5%E5%AD%90″target=”_blank”>美丽的日子</a>
*/
if (!$wsql->query(‘SELECT * FROM a WHERE $class == “listlink”‘)){
print “Query error: ” . $wsql->error;
exit;
}

//显示结果:
foreach($wsql->fetch_array() as $row){

// print_r($row);
/*
$row is an array and looks like this:
Array (
[href] => /search?q=%E7%BE%8E%E4%B8%BD%E7%9A%84%E6%97%A5%E5%AD%90
[class] => listlink
[tagname] => a
[text] => 美丽的日子
)
*/
echo ‘<a href=”http://deloz.net/link2.php?site=’.$row['href'].’”target=”_blank”>’.$row['text'].’</a><br />’;

}

?>

本文转载自: Deloz.Net[http://Deloz.Net/ ] 原文出处:http://deloz.net/1000000483.html


转载请注明来自:[MSN Spaces]http://msn.shandian.biz/97.html

  1. 本文目前尚无任何评论.