在网上经常看到一些网页采集方案,,但总绕不过采集规则的设置,每抓取一种类型的网页需要设置一种规则。。用这些规则进行替换,正则,踢除等操作,,然后取出页面的内容。。
有没有一种好的方法,不用我们为每一种类型的网页书写规则呢??
下面就来讨论这个问题::
比如我们抓取新浪新闻的内容,我们看到每个新闻内容那一块,代码基本是整个网页里面字符数最多的,如果我们把这一块代码取出来,不就达到我们的目的了吗?
我们知道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
分享到:
相关推荐
但请注意,网页抓取应遵循网站的robots.txt规则,并尊重网站的版权和使用条款,避免对服务器造成过大的访问压力。 总之,`php应用curl扩展抓取网页类.zip`提供的这个PHP类库,结合cURL扩展,为开发者提供了一种高效...
另一方面,"getwebfile.php"可能是实现网页抓取功能的PHP脚本。PHP是一种服务器端编程语言,常用于网页开发,也可以用于构建网络爬虫,从网页中提取数据。 在编写网页抓取工具时,我们需要考虑以下关键知识点: 1....
总的来说,PHP模拟浏览器请求网页内容是一项基础但实用的技术,它允许开发者在无需浏览器的情况下获取网络资源,极大地拓展了PHP在Web开发中的应用范围。理解并掌握这些方法,将有助于你在实际项目中更高效地获取和...
在PHP开发中,有时我们需要从网页中抓取并下载图片,比如进行数据抓取、建立镜像站或者创建一个图片聚合服务。为了实现这个功能,我们可以利用PHP编写一个专门的类来处理这个问题。"php网页抓图片的类.zip"就是一个...
标题和描述中提到的技术是关于使用PHP来实现网页内容到Word文档的转换,并且能够将网页中的图片一并导出到Word中。这种功能在许多实际应用中非常有用,特别是对于人才网站,用户可以直接下载包含自己简历的Word文档...
这可以通过监听数据库变化或者设置定时任务来实现。 `index.php`通常作为网站的入口文件,它负责调度PHP代码,根据用户请求决定是否生成或返回静态页面。在实际应用中,可能会有一个专门的类或函数库来处理静态化...
4. PHP实现爬虫:PHP可以编写高效的网络爬虫,利用cURL库发送HTTP请求,抓取网页内容;通过DOM或正则表达式解析HTML,提取所需信息;使用SQLite、MySQL等数据库存储数据。在香菇CMS中,PHP可能用于构建爬虫的调度...
它可能涵盖如何设置服务器环境(如PHP版本、MySQL数据库配置)、如何导入数据库结构、如何部署源码到服务器以及如何配置伪静态规则等内容。 而“132687638979932941”可能是一个数据库文件名,或者是项目的某个关键...
知识点一:PHP实现Ajax接口抓取技术 在处理淘宝商品用户评价信息时,发现评论数据是通过Ajax接口调取的。 Ajax是一种在无需重新加载整个页面的情况下,能够更新部分网页的技术。在PHP中抓取Ajax接口数据通常需要模拟...
【PHP在线扒站web源码.zip】是一款专为非专业编程人员设计的简易PHP扒站系统,旨在简化网站数据抓取的过程,使得用户无需深入理解编程技术也能进行基本的网页内容抓取。这款系统的核心特点是操作简单易懂,非常适合...
您只需要设置好站点栏目,程序就自动进行产生相关内容,无需人工干预。 无限网站,傻瓜式操作,无须编写采集规则,无限相关关键词采集,无限新数据采集,无限数据发布,可永久免费升级,可任意电脑(包含vps)使用 ...
这篇博客文章可能详细介绍了该PHP采集类库的使用方法、功能特性以及示例代码,帮助读者理解和学习如何利用这个库来实现网页数据的抓取。 从标签“源码”我们可以推断,这个库提供了源代码,用户可以自由查看、学习...
1. **内容管理系统(CMS)**: MaxCMS 4.0是一个基于PHP开发的内容管理平台,它允许用户无需深入编程知识就能创建、编辑和管理网站内容。CMS通常包括后台管理系统、模板引擎和数据库接口等核心功能。 2. **数据采集*...
其内容质量高,关键字过滤机制完善,对于进行采集的用户来说,这意味着可以放心抓取,无需过多担心违禁词汇的问题。 "杰奇"是一种常见的开源CMS(内容管理系统)系统,特别适用于建设小说网站。它提供了强大的管理...
【标题】"基于PHP的DuoMiCms资源采集插件 php版.zip"指的是一个用于DuoMiCms系统的PHP插件,其主要功能是实现资源的自动化采集和处理。这个插件是专为PHP环境设计的,适用于那些运行DuoMiCms内容管理系统并且希望...
【Discuz插件】一键抓取天天快报1.0 是一款专为Discuz论坛系统设计的插件,其主要功能是实现对“天天快报”内容的自动化抓取和发布。这款插件对于运营Discuz论坛的用户来说,具有显著提高工作效率、丰富论坛内容的...
它通过在网页中添加随机的干扰元素,如乱码或不可读文本,来阻止自动化数据抓取工具(如网页采集器)有效地抓取网站内容,从而保护网站的独特性和数据安全。 【描述】"干扰码防采集插件 for PHP168"主要功能是提高...
【标题】"问问小偷 php 伪静态版"是一个基于PHP编程语言的程序,主要用于实现网站内容的抓取和处理。这个程序的核心功能是模仿搜索引擎爬虫,通过伪静态技术来更加自然地获取网络上的信息。伪静态技术是将动态网页...
首先,程序会使用爬虫技术遍历目标网站的所有链接,抓取网页内容;接着,它会对抓取的数据进行解析,提取出文本、图片、链接等关键信息;最后,这些内容会被存储在本地服务器上,形成一个完整的镜像站点。 **镜像...
立即开始自动采集更新您的网站,而且结合开源的wordpress程序,新手也能快速上手,根据所设定的采集方式采集网址,然后自动抓取网页内容,检测文章是否重复,导入更新文章,这一切操作程序都是全自动完成,无需人工...