php抓取网页snoopy( PHP补充资料:以上实现过程是建于ThinkPHP框架的基础之的 )
优采云 发布时间: 2021-11-06 13:14php抓取网页snoopy(
PHP补充资料:以上实现过程是建于ThinkPHP框架的基础之的
)
class IndexAction extends Action
{
function index()
{
/**
+----------------------------------------------------------
* 获取网页的meta信息
+----------------------------------------------------------
* Snoopy.class.php
+----------------------------------------------------------
* http://snoopy.sourceforge.net/
+----------------------------------------------------------
* Snoopy是一个php类,用来模仿web浏览器的功能,它能完成获取网页内容和发送表单的任务。
+----------------------------------------------------------
*/
header("Content-Type:text/html; charset=".C('OUTPUT_CHARSET'));
import('@.Util.Snoopy');
$get_data_www = new Snoopy;
if( $get_data_www->fetch('http://www.imyike.com/') ){
$contents = $get_data_www->results;
while(list($key,$val) = each($get_data_www->headers))
echo $key.": ".$val."<br />n";
preg_match('/]*?content=["']?text/html;?[s]*charset=?([^>'"/]*)["']?[s]*[/]?[s]*>/si', $contents, $match);
if (isset($match) && is_array($match) && count($match) > 0)
{
$charset = $match[1];
}
dump($charset);
preg_match('/([^>]*)/si', $contents, $match );
if (isset($match) && is_array($match) && count($match) > 0)
{
$title = strip_tags($match[1]);
}
dump($title);
preg_match_all('/"]*)"?[s]*[/]?[s]*>/si', $contents, $match);
if (isset($match) && is_array($match) && count($match) == 3)
{
$originals = $match[0];
$names = $match[1];
$values = $match[2];
if (count($originals) == count($names) && count($names) == count($values))
{
$metaTags = array();
for ($i=0, $limiti=count($names); $i < $limiti; $i++)
{
$metaTags[$names[$i]] = $values[$i];
}
dump($metaTags);
}
}
}
}
}
补充资料:
以上实现过程基于ThinkPHP框架。内容首次发布于:%3D1
关于 Snoopy.class.php 的一些信息:
说明:
史努比是什么?
Snoopy 是一个 php 类,用来模仿网页浏览器的功能,可以完成获取网页内容和发送表单的任务。
史努比的一些特点:
* 方便抓取网页内容
* 方便抓取网页文字内容(去除HTML标签)
* 方便抓取网页链接
* 支持代理主机
* 支持基本的用户名/密码验证
* 支持设置user_agent、referer(传入路由)、cookies和header内容(头文件)
* 支持浏览器转向,可控制转向深度
* 可以将网页中的链接扩展为高质量的url(默认)
* 方便提交数据和获取返回值
* 支持跟踪 HTML 框架(v0.92 添加)
* 支持重定向时传递 cookie(v0.92 增加)
要求:
史努比需要 PHP 和 PCRE(Perl 兼容正则表达式),
应该是 PHP 3.0.9 及更高版本。对于读取超时支持,它需要
PHP 4 Beta 4 或更高版本。史努比是用 PHP 3.0.12.
开发和测试的
类方法:
fetch($URI)
这是用来抓取网页内容的方法。
$URI 参数是被抓取网页的 URL 地址。
获取的结果存储在 $this->results 中。
如果你正在抓取一个帧,史努比会跟踪每一帧并将其存储在一个数组中,然后将其存储在 $this->results 中。
fetchtext($URI)
该方法与fetch()类似,唯一不同的是该方法会去除HTML标签等无关数据,只返回网页中的文本内容。
fetchform($URI)
该方法与fetch()类似,唯一不同的是该方法会去除HTML标签等无关数据,只返回网页中的表单内容(form)。
fetchlinks($URI)
这个方法和fetch()类似,唯一不同的是这个方法会去除HTML标签等无关数据,只返回网页中的链接。
默认情况下,相对链接会自动补全并转换成完整的网址。
submit($URI,$formvars)
此方法向$URL 指定的链接地址发送确认表单。 $formvars 是一个存储表单参数的数组。
submittext($URI,$formvars)
该方法与submit()类似,唯一不同的是,该方法会去除HTML标签等无关数据,登录后只返回网页中的文本内容。
submitlinks($URI)
这个方法类似于submit()。唯一不同的是,该方法会去除HTML标签等无关数据,只返回网页中的链接。
默认情况下,相对链接会自动补全并转换成完整的网址。
类属性:(括号内为默认值)
$host 连接的主机
$port 连接的端口
$proxy_host 使用的代理主机,如果有的话
$proxy_port 使用的代理主机端口,如果有的话
$agent 用户代理伪装 (Snoopy v0.1)
$referer 来路信息,如果有的话
$cookies cookies, 如果有的话
$rawheaders 其他的头信息, 如果有的话
$maxredirs 最大重定向次数, 0=不允许 (5)
$offsiteok whether or not to allow redirects off-site. (true)
$expandlinks 是否将链接都补全为完整地址 (true)
$user 认证用户名, 如果有的话
$pass 认证用户名, 如果有的话
$accept http 接受类型 (image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*)
$error 哪里报错, 如果有的话
$response_code 从服务器返回的响应代码
$headers 从服务器返回的头信息
$maxlength 最长返回数据长度
$read_timeout 读取操作超时 (requires PHP 4 Beta 4+)
设置为0为没有超时
$timed_out 如果一次读取操作超时了,本属性返回 true (requires PHP 4 Beta 4+)
$maxframes 允许追踪的框架最大数量
$status 抓取的http的状态
$temp_dir 网页服务器能够写入的临时文件目录 (/tmp)
$curl_path cURL binary 的目录, 如果没有cURL binary就设置为 false