php抓取网页snoopy( PHP补充资料:以上实现过程是建于ThinkPHP框架的基础之的 )

优采云 发布时间: 2021-11-06 13:14

  php抓取网页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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线