本文主要介绍了一个PHP实现小偷程序的实例,实现了抓取网页咨询和商品信息的功能,具有一定的参考价值。感兴趣的朋友可以参考一下。
为什么使用“小偷程序”?
远程抓取文章信息或商品信息是很多企业要求程序员实现的功能,也就是俗称的小偷程序。它的主要优点是解决了公司网络编辑的繁重工作,大大提高了效率。只需要运行一下就可以快速抓取别人网站的信息。
“小偷程序”在哪里运行?
“小偷程序”最好在DOS下通过PHP命令运行,或者在Windows下通过Linux运行,因为网页会超时。
比如图(以Windows下的DOS为例):
“小偷程序”的实现
下面举个例子来说明。我们来抢一下华强电子网的资料。请先看这个链接http://www.hqew.com/info-c10.html。当你打开这个页面,你会发现一些现象:
1.信息列表有500页(2012年01月03日);
2.每个页面的url链接都是有规律的,比如:第一页是http://www.hqew.com/info-c10-1.html;第二页是http://www.hqew.com/info-c10-2.html;第500页上的http://www.hqew.com/info-c10-500.html;
3.从第二点可以知道“华强电子网”的信息是伪静态或者是生成的静态页面。
其实大部分网站都有这样的规则,比如中关村在线,慧聪网,新浪,淘宝。
这样,我们就可以通过这个思路来抓取页面内容:
1.先获取文章列表页面的内容;
2、根据文章列表页面的内容循环获取文章的url地址;
3.根据文章的url地址获取文章的详细内容。
这里主要抓信息页:标题、发布日期、作者、来源、内容。
“华强电子网”资讯抓取
首先,构建数据表结构,如下所示:
创建表“文章”。“文章”(
` id ' MEDIUMINT(8)UNSIGNED NOT NULL AUTO _ INCREMENT主键,
` title ' VARCHAR(255)字符集utf8 COLLATE utf8 _ general _ ci NOT NULL,
` date ' VARCHAR(50)不为空,
` author ' VARCHAR(100)字符集utf8 COLLATE utf8 _ general _ ci NOT NULL,
` source ' VARCHAR(100)字符集utf8 COLLATE utf8 _ general _ ci NOT NULL,
` content '文本不为空
)ENGINE=MYISAM字符集utf8 COLLATE utf8 _ general _ ci
抓取程序:
?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
/**
*捕获华强电子网络的信息程序
*作者李。
*最后修改日期:2012-1-3 15:39:35美元
*/
header(' Content-Type:text/html;charset=utf-8 ');
$mysqli=new mysqli('localhost ',' root ',' 1715544 ',' article ');#数据库连接,请手动修改自己的数据库信息。
$ mysqli-set _ charset(' UTF8 ');#设置数据库代码
函数数据($url) {
global $ mysqli
$ result=file _ get _ contents($ URL);# $result获取url链接内容(注意:这里是文章列表链接)
$pattern='/lispan class='box_r '。\/spana href='([^'] )' title=' . '。\/a \/Li/Usi ';#获取文章url的匹配规律性
preg_match_all($pattern,$result,$ arr);#将文章列表的url分配给数组$arr(二维数组)
foreach ($arr[1] as $val) {
$val='http://www.hqew.com '。$ val#真实文章的url地址
$ re=file _ get _ contents($ val);# $re是文章url的内容
$ pa='/div id=' article' \ s h1(。)\/h1 \ s p id=' article \ _ ext info' \ s已发布:\ s(。)\s \|\s作者:\s(。)\ s \ | \)\ s span style=' display:none '。div id='article_body'\s*。)\s \/div\s \/div!-文章结尾-/Usi ';#获取文章内容的规律性
preg_match_all($pa,$re,$ array);#将检索到的内容分配给数组$array
$ content=trim($ array[5][0]);
$con=array(
title '=mysqlString($ array[1][0]),
date'=mysqlString($array[2][0]),
author '=MySQL string(strip author tag($ array[3][0]),
source '=mysqlString($ array[4][0]),
content '=MySQL string(strip content tag($ content))
);
$sql='插入文章(标题、日期、作者、来源、内容)值(' {$con['title']} ',' {$con['date']} ',' {$con['author']} ',' { $ con[' content ']} ')';
$ row=$ mysqli-query($ SQL);# 添加到数据库
if(row){
回声”添加成功!";
}否则{
回显"添加失败!";
}
}
}
/**
* stripOfficeTag($v)对文章内容进行过滤,比如:去掉文章中的链接,过滤掉没用的超文本标记语言标签……
* @param string $v
* @返回字符串
*/
函数stripContentTag($v){
$v=str_replace('p /p ','',$ v);
$v=str_replace('p /','',$ v);
$v=preg_replace('/a href=' .target='\_blank'strong(.)\/strong\/a/Usi ',' \1 ',$ v);
$v=preg_replace('%(span\s*[^]*(.*)/span)%Usi ',' \2 ',$ v);
$ v=preg _ replace(' %(\ s class='mso[^']')% si ','',$ v);
$ v=preg _ replace(' %(style='[^']*mso[^]*)%si','',$五世');
$v=preg_replace('/b\/b/','',$ v);
返回$ v;
}
/**
* stripTitleTag($title)对文章标题进行过滤
* @param string $v
* @返回字符串
*/
函数stripAuthorTag($v) {
$v=preg_replace('/a href=' .target='\_blank '()\/a/Usi ',' \1 ',$ v);
返回$ v;
}
/**
* mysqlString($str)过滤数据
* @ param stringstr
* @返回字符串
*/
函数mysqlString($str) {
返回添加斜线(trim($ str));
}
/**
*初始化(最小值,最大值)入口程序方法,从美元最小值页开始取,到最大值页结束
* @param int $min从一开始
* @ param intmax
* @返回字符串返回统一资源定位器地址
*/
函数初始化($min=1,$max) {
for($ I=$ min;$ i=$ max$i ) {
数据(' http://www。hqew。com/info-C10-{ $ I }).html’);
}
}
init(1500);//程序入口,从第一页开始抓,抓取500页
?
通过上面的程序,就可以实现抓取华强电子网的资讯信息。
入口方法初始化($最小值,$最大值)如果想抓取1-500 页面内容,那么初始化(1500)即可!这样,用不了多长时间,华强电子网的资讯就会全部抓取到数据库里面了。^_^
执行界面:
数据库:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。