小偷程序的PHP实现示例
为什么要用“小偷程序”?
远程抓取文章信息或者商品信息,是很多企业都要求程序员实现的功能,也就是俗语小偷程序。它的主要优点是解决了公司网络编辑的繁重工作,大大提高了效率。一运行就能快速抓取别人网站的信息。
“小偷程序”在哪里运行?
“小偷程序”最好在DOS下运行,或者在Windows下的Linux下通过PHP命令运行,因为网页会超时。
例如图(以Windows下的DOS为例):
“小偷计划”的实施
这里,我们主要通过一个例子来说明。让我们一起来抓取“华强电子网”的信息。请先看看http://www.hqew.com/info-c10.html这个链接。当你打开这个页面时,你会在这个页面上发现一些现象:
1.信息列表共500页(2012年1月3日);
2.每个页面的网址链接都是常规的,例如:第一页是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.从第二点,我们可以知道“华强电子网”的信息是一个伪静态或生成的静态页面
其实大部分网站都有这样的规则,比如中关村在线、HC网、新浪、淘宝。
这样,我们就可以通过这样的思路来捕捉页面内容:1。先获取文章列表页面的内容;2.根据文章列表页面的内容循环获取文章的url地址;3.根据文章的网址获取文章的详细内容
在这里,我们主要捕捉信息页面:标题、发布日期、作者、来源和内容
华强电子网的信息采集
首先,创建一个数据表结构,如下所示:
CREATE TABLE ` article . ` article `(` id ` MEDIUMINT(8)UNSIGNED NOT NULL AUTO _ INCREMENT PRIMARY KEY,` title` VARCHAR(255)字符集utf8 COLLATE utf8 _ general _ ci NOT NULL,` date` VARCHAR(50 ) NOT NULL,` author` VARCHAR(100)字符集utf8 COLLATE utf8 _ general _ ci NOT NULL,` content ` TEXT NOT NULL)ENGINE=MYISAM字符集utf8 COLLATE utf8抓取程序:
?php /** *抓取"华强电子网"资讯程序*作者李。*最后修改$ date : 2012-1-3 15:39336035 $ */header(' Content-type : text/html;charset=utf-8 ');$ MySQL=new MySQL(' localhost ',' root ',' 1715544 ',' article ');# 数据库连接,请手动修改您自己的数据库信息$ MySQL-set _ charset(' UTF8 ');# 设置数据库编码函数数据($ URL){ global $ MySQL;$ result=file _ get _ contents($ URL);# $结果获取全球资源定位器(统一资源定位符)链接内容(注意:这里是文章列表链接)$pattern='/lispan class='box_r ' .\/spana href='([^'] )' title=' . '。\/a \/Li/Usi ';# 取得文章全球资源定位器(统一资源定位符)的匹配正则preg_match_all($pattern,$result,$ arr);# 把文章列表全球资源定位器(统一资源定位符)分配给数组$arr(二维数组)foreach($ arr[1]as $ val){ $ val=' http://www .哦。com ' .$ val#真实文章全球资源定位器(统一资源定位符)地址$ re=file _ get _ contents($ val);# $re为文章全球资源定位器(统一资源定位符)的内容$pa='/div id='article'\s h1(.)\/h1\s p id='article\_extinfo'\s发布:(s ).)\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 '=MySQL StrIng($ array[1][0])、' date'=mysqlString($array[2][0])、' author '=MySQL StrIng(StrIng AuthorTag($ array[3][0]))、' source '=MySQL StrIng($ array[4][0])、' content '=MySQL StrIng(StrIng content Tag($ content)));$sql='INSERT INTO article(标题、日期、作者、来源、内容)VALUES ('{$con['title']} ',' {$con['date']} ',' {$con['author']} ',' {$con['source']} ',' { $ con[' content ']} ')')')';$ row=$ MySQL-query($ SQL);# 添加到数据库if ($row) { echo '添加成功!} else { echo '添加失败!} } } /** * stripOfficeTag($v)对文章内容进行过滤,比如:去掉文章中的链接,过滤掉没用的超文本标记语言标签……* @ param string $ v * @ return string */function strippentcontenttag($ 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);$v=preg_replace('/\/b/','',$ v);返回五美元;} /** * stripTitleTag($title)对文章标题进行过滤* @ param string $ v * @ return string */function stripe author tag($ v){ $ v=preg _ replace('/a href=' . 'target='\_blank '(.)\/a/Usi ',' \1 ',$ v);返回五美元;} /** * mysqlString($str)过滤数据* @ param String $ str * @ return String */function MySQL String($ str){ return addslashes(trim($ str));} /** * init($min,$max)入口程序方法,从$min页开始取,到$max页结束* @param int $min从一开始* @ param int $ max * @返回字符串返回统一资源定位器地址*/function init($min=1,$ max){ for($ I=$ min;$ i=$ max$ I){ data(' http://www。哦。com/info-C10-{ $ I } .html ');} } init(1,500);//程序入口,从第一页开始抓,抓取500页?通过上面的程序,就可以实现抓取华强电子网的资讯信息。
入口方法初始化(最小值,最大值)如果想抓取1-500 页面内容,那么初始化(1,500)即可!这样,用不了多长时间,华强电子网的资讯就会全部抓取到数据库里面了。^_^
执行界面:
数据库:
版权声明:小偷程序的PHP实现示例是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。