`
hpu423
  • 浏览: 3803 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

php无需设置规则,抓取网页主要内容的实现

阅读更多

   在网上经常看到一些网页采集方案,,但总绕不过采集规则的设置,每抓取一种类型的网页需要设置一种规则。。用这些规则进行替换,正则,踢除等操作,,然后取出页面的内容。。

有没有一种好的方法,不用我们为每一种类型的网页书写规则呢??

下面就来讨论这个问题::

比如我们抓取新浪新闻的内容,我们看到每个新闻内容那一块,代码基本是整个网页里面字符数最多的,如果我们把这一块代码取出来,不就达到我们的目的了吗?

我们知道html其实是xml的一种,我们把新浪某个新闻的显示代码当作xml来处理,,

我们找出这个xml页面里面所有的父节点,以及父节点里面包含的子节点,,将他们写入一个数组,,

然后以这些节点字符串的长度,由大到小,对这些节点进行排序,,,理论上,,排序后的数组,第一个节点即是我们需要的内容。。。

另,一个页面中可能有许多js广告代码或者css代码,我们可以将他们先清除,,以减少误差。。

还有一个问题,因为我们是取出一个页面所有的节点,,一个大的页面,,节点太多了,,很耗资源,,有时可能造成机器崩溃,,那么该怎么办呢??

我们发现一般新闻内容节点大部分是<div>,<td>,那么我们可以只取这两种节点即可,,可以节省许多资源,,具体取那种节点也可以自己设置。。。

另一种节省资源的方案是这样的,,比如我发现新闻内容节点里面必须包含“新浪”这两个字,,那么我们可以把不包含这两个字的节点去掉。。相反的道理,如果新闻内容节点不包含“新浪”这两个字,我们也可以剔除包含这两个字的节点。。当然这种剔除多余节点的规则也很多。。

最后我们也可以用“similar_text”这个函数来去除一些节点,减少干扰,具体做法,请读者自己体会:

similar_text() 函数计算两个字符串的匹配字符的数目。

该函数也可以计算两个字符串的相似度(以百分比计)。

下面我给出我的一个简单方案:

需要用到"simple_html_dom",具体请打开 http://simplehtmldom.sourceforge.net/

下面是代码:可以输入网址如: http://news.sina.com.cn/c/2010-10-21/085321321471.shtml试试
<?php
//自动得到文章
include('simplehtmldom/simple_html_dom.php');
function requests($str) {
    return isset($_REQUEST[$str]) ? $_REQUEST[$str]:"";
}
//include('../include/config.php');
$similar = 40; //相似度
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
</head>
<body>
<div style="width:760px; margin:0 auto;">

<div>
<form name="sad" method="post" action="">

<input type="text" name="str" value="" size=100 ><br>
<input type="submit" name="sub" value="提交">

</form>
</div>
<div style="width:600px;">
<?
$str = requests("str");
if($str != ""){
$str = trim($str);
$str = file_get_contents($str);
$str = strtolower($str);
//去js css
$str = preg_replace("'<script[^>]*?>.*?</script>'si", "", $str);
$str = preg_replace("'<style[^>]*?>.*?</style>'si", "", $str);

$html = str_get_html($str);
$tagarr = array('div', 'td','li');
$rs = array();
foreach($tagarr as $tag){
    $tdo = $html->find($tag);
    $tds = array();
    foreach($tdo as $tv){
        $tds[] = $tv->innertext;
    }
    foreach($tds as $v){
        $v = strip_tags($v);
        $len = strlen($v);
        $rs[$len] = $v;
    }

}

ksort($rs);
$tarr =array_reverse($rs);
//fdebug($tarr);
$i = 0;
$len = count($tarr);
$tarr2 = $tarr;
for($i;$i <$len; $i++ ){
       $j = $i + 1 ;
    for($j ; $j < $len ; $j++){
        $intv = similar_text($tarr[$i], $tarr[$j]);
        $ra = number_format(($intv / strlen($tarr[$i])) * 100,2);
        if($ra > $similar){
            unset($tarr2[$i]);continue ;
        }
     // echo $ra ."<br>";
    }
   // echo $i . "=======================<br>";
}
unset($tarr);
//sort($tarr2);
$tarr =array_reverse($tarr2);
//fdebug($tarr);
$rv = "";
if(count($tarr) > 0){
$rv = $tarr[count($tarr)-1];
$rv = str_replace(' ', '' , $rv);
$rv = str_replace('<br />', '' , $rv);
$rv = str_replace("\n", '' , $rv);
$rv = str_replace("\r", '' , $rv);
}
echo $rv;
}
?>
</div>
</div>
</body>
</html>

首发地址 http://www.yichao123.com/a/v.php?id=500

分享到:
评论
1 楼 waiting 2010-10-29  
PHP5内置的DOM系列函数应该也可以实现。

相关推荐

    php应用curl扩展抓取网页类.zip

    但请注意,网页抓取应遵循网站的robots.txt规则,并尊重网站的版权和使用条款,避免对服务器造成过大的访问压力。 总之,`php应用curl扩展抓取网页类.zip`提供的这个PHP类库,结合cURL扩展,为开发者提供了一种高效...

    网页抓取工具

    另一方面,"getwebfile.php"可能是实现网页抓取功能的PHP脚本。PHP是一种服务器端编程语言,常用于网页开发,也可以用于构建网络爬虫,从网页中提取数据。 在编写网页抓取工具时,我们需要考虑以下关键知识点: 1....

    php 模拟浏览器请求网页见容

    总的来说,PHP模拟浏览器请求网页内容是一项基础但实用的技术,它允许开发者在无需浏览器的情况下获取网络资源,极大地拓展了PHP在Web开发中的应用范围。理解并掌握这些方法,将有助于你在实际项目中更高效地获取和...

    基于PHP的淘宝画报PHP抓取PHP免费版源码.zip

    【标题】"基于PHP的淘宝画报PHP抓取PHP免费版源码.zip"指的是一个使用PHP编程语言编写的源代码,其主要功能是抓取淘宝画报的数据。淘宝画报是一个展示商品、时尚搭配和潮流资讯的平台,而这个源码能够帮助开发者获取...

    php网页抓图片的类.zip

    在PHP开发中,有时我们需要从网页中抓取并下载图片,比如进行数据抓取、建立镜像站或者创建一个图片聚合服务。为了实现这个功能,我们可以利用PHP编写一个专门的类来处理这个问题。"php网页抓图片的类.zip"就是一个...

    将网页内容生成到word,可将图片生成到word

    标题和描述中提到的技术是关于使用PHP来实现网页内容到Word文档的转换,并且能够将网页中的图片一并导出到Word中。这种功能在许多实际应用中非常有用,特别是对于人才网站,用户可以直接下载包含自己简历的Word文档...

    基于PHP的首发智云影视资源网PHP采集无需数据库V1.2版源码.zip

    2. **配置文件**:如config.php,存储全局配置信息,如网站设置、路由规则等。 3. **控制器**:处理用户请求,调用模型进行业务逻辑处理。 4. **视图**:如模板文件,负责页面的展示。 5. **模型**:处理数据操作,...

    php生成静态页面源码

    这可以通过监听数据库变化或者设置定时任务来实现。 `index.php`通常作为网站的入口文件,它负责调度PHP代码,根据用户请求决定是否生成或返回静态页面。在实际应用中,可能会有一个专门的类或函数库来处理静态化...

    PHP实例开发源码—香菇CMS爬虫系统 php版.zip

    4. PHP实现爬虫:PHP可以编写高效的网络爬虫,利用cURL库发送HTTP请求,抓取网页内容;通过DOM或正则表达式解析HTML,提取所需信息;使用SQLite、MySQL等数据库存储数据。在香菇CMS中,PHP可能用于构建爬虫的调度...

    PHP实例开发源码—uzcms php小说爬虫伪静态极速版.zip

    它可能涵盖如何设置服务器环境(如PHP版本、MySQL数据库配置)、如何导入数据库结构、如何部署源码到服务器以及如何配置伪静态规则等内容。 而“132687638979932941”可能是一个数据库文件名,或者是项目的某个关键...

    PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例

    知识点一:PHP实现Ajax接口抓取技术 在处理淘宝商品用户评价信息时,发现评论数据是通过Ajax接口调取的。 Ajax是一种在无需重新加载整个页面的情况下,能够更新部分网页的技术。在PHP中抓取Ajax接口数据通常需要模拟...

    PHP极速链程序 v2.2011 附伪静态规则.rar

    您只需要设置好站点栏目,程序就自动进行产生相关内容,无需人工干预。 无限网站,傻瓜式操作,无须编写采集规则,无限相关关键词采集,无限新数据采集,无限数据发布,可永久免费升级,可任意电脑(包含vps)使用 ...

    PHP在线扒扒站web源码.zip

    【PHP在线扒站web源码.zip】是一款专为非专业编程人员设计的简易PHP扒站系统,旨在简化网站数据抓取的过程,使得用户无需深入理解编程技术也能进行基本的网页内容抓取。这款系统的核心特点是操作简单易懂,非常适合...

    超级强大的php采集类库

    这篇博客文章可能详细介绍了该PHP采集类库的使用方法、功能特性以及示例代码,帮助读者理解和学习如何利用这个库来实现网页数据的抓取。 从标签“源码”我们可以推断,这个库提供了源代码,用户可以自由查看、学习...

    maxcms4.0采集规则.rar

    1. **内容管理系统(CMS)**: MaxCMS 4.0是一个基于PHP开发的内容管理平台,它允许用户无需深入编程知识就能创建、编辑和管理网站内容。CMS通常包括后台管理系统、模板引擎和数据库接口等核心功能。 2. **数据采集*...

    三五中文网杰奇后台采集规则

    其内容质量高,关键字过滤机制完善,对于进行采集的用户来说,这意味着可以放心抓取,无需过多担心违禁词汇的问题。 "杰奇"是一种常见的开源CMS(内容管理系统)系统,特别适用于建设小说网站。它提供了强大的管理...

    基于PHP的DuoMiCms资源采集插件 php版.zip

    【标题】"基于PHP的DuoMiCms资源采集插件 php版.zip"指的是一个用于DuoMiCms系统的PHP插件,其主要功能是实现资源的自动化采集和处理。这个插件是专为PHP环境设计的,适用于那些运行DuoMiCms内容管理系统并且希望...

    【Discuz插件】一键抓取天天快报1.0

    【Discuz插件】一键抓取天天快报1.0 是一款专为Discuz论坛系统设计的插件,其主要功能是实现对“天天快报”内容的自动化抓取和发布。这款插件对于运营Discuz论坛的用户来说,具有显著提高工作效率、丰富论坛内容的...

    干扰码防采集插件 for PHP168.rar

    它通过在网页中添加随机的干扰元素,如乱码或不可读文本,来阻止自动化数据抓取工具(如网页采集器)有效地抓取网站内容,从而保护网站的独特性和数据安全。 【描述】"干扰码防采集插件 for PHP168"主要功能是提高...

    问问小偷 php 伪静态版

    【标题】"问问小偷 php 伪静态版"是一个基于PHP编程语言的程序,主要用于实现网站内容的抓取和处理。这个程序的核心功能是模仿搜索引擎爬虫,通过伪静态技术来更加自然地获取网络上的信息。伪静态技术是将动态网页...

Global site tag (gtag.js) - Google Analytics