为什么使用“小偷程序”?

远程抓取文章资讯或商品信息是很多企业要求程序员实现的功能,也就是俗说的小偷程序。其最主要的优点是:解决了公司网编繁重的工作,大大提高了效率。只需要一运行就能快速的抓取别人网站的信息。

“小偷程序”在哪里运行?

“小偷程序” 应该在 Windows 下的 DOS(参考文章:http://blog.csdn.net/liruxing1715/article/details/7079488) 或 Linux 下通过 PHP 命令运行为最佳,因为,网页运行会超时。

比如图(Windows 下 DOS 为例):

“小偷程序”的实现

这里主要通过一个实例来讲解,我们来抓取下“华强电子网”的资讯信息,请先看观察这个链接 http://www.hqew.com/info-c10.html,当您打开这个页面的时候发现这个页面会发现一些现象:

1、资讯列表有 500 页(2012-01-03);

2、每页的 url 链接都有规律,比如:第1页为http://www.hqew.com/info-c10-1.html;第2页为http://www.hqew.com/info-c10-2.html;……第500页为http://www.hqew.com/info-c10-500.html;

3、由第二点就可以知道,“华强电子网” 的资讯是伪静态或者是生成的静态页面

其实,基本上大部分的网站都有这样的规律,比如:中关村在线、慧聪网、新浪、淘宝……。

这样,我们可以通过这样的思路来实现页面内容的抓取:

1、先获取文章列表页内容;

2、根据文章列表页内容循环获取文章的 url 地址;

3、根据文章的 url 地址获取文章的详细内容

这里,我们主要抓取资讯页里面的:标题(title)、发布如期(date)、作者(author)、来源(source)、内容(content)

“华强电子网”资讯抓取

首先,先建数据表结构,如下所示:

[sql] view plaincopy
  1. CREATE TABLE `article`.`article` (
  2. `id` MEDIUMINT( 8 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  3. `title` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
  4. `date` VARCHAR( 50 ) NOT NULL ,
  5. `author` VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
  6. `source` VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
  7. `content` TEXT NOT NULL
  8. ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;

抓取程序:

[php] view plaincopy
  1. <?php
  2. /**
  3. * 抓取“华强电子网”资讯程序
  4. * author Lee.
  5. * Last modify $Date: 2012-1-3 15:39:35 $
  6. */
  7. header('Content-Type:text/html;Charset=utf-8');
  8. $mysqli = new mysqli('localhost', 'root', '1715544', 'article'); # 数据库连接,请手动修改您自己的数据库信息
  9. $mysqli->set_charset('UTF8'); # 设置数据库编码
  10. function data($url) {
  11. global $mysqli;
  12. $result = file_get_contents($url); # $result 获取 url 链接内容(注意:这里是文章列表链接)
  13. $pattern = '/<li><span class="box_r">.+<\/span><a href="([^"]+)"  title=".+" >.+<\/a><\/li>/Usi'; # 取得文章 url 的匹配正则
  14. preg_match_all($pattern, $result, $arr); # 把文章列表 url 分配给数组$arr(二维数组)
  15. foreach ($arr[1] as $val) {
  16. $val = 'http://www.hqew.com' . $val; # 真实文章 url 地址
  17. $re = file_get_contents($val); # $re 为文章 url 的内容
  18. $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><!--article end-->/Usi'; # 取得文章内容的正则
  19. preg_match_all($pa, $re, $array); # 把取到的内容分配到数组 $array
  20. $content = trim($array[5][0]);
  21. $con = array(
  22. 'title'=>mysqlString($array[1][0]),
  23. 'date'=>mysqlString($array[2][0]),
  24. 'author'=>mysqlString(stripAuthorTag($array[3][0])),
  25. 'source'=>mysqlString($array[4][0]),
  26. 'content'=>mysqlString(stripContentTag($content))
  27. );
  28. $sql = "INSERT INTO article(title,date,author,source,content) VALUES ('{$con['title']}','{$con['date']}','{$con['author']}','{$con['source']}','{$con['content']}')";
  29. $row = $mysqli->query($sql); # 添加到数据库
  30. if ($row) {
  31. echo 'add success!';
  32. } else {
  33. echo 'add failed!';
  34. }
  35. }
  36. }
  37. /**
  38. * stripOfficeTag($v) 对文章内容进行过滤,比如:去掉文章中的链接,过滤掉没用的 HTML 标签……
  39. * @param string $v
  40. * @return string
  41. */
  42. function stripContentTag($v){
  43. $v = str_replace('<p> </p>', '', $v);
  44. $v = str_replace('<p />', '', $v);
  45. $v = preg_replace('/<a href=".+" target="\_blank"><strong>(.+)<\/strong><\/a>/Usi', '\1', $v);
  46. $v = preg_replace('%(<span\s*[^>]*>(.*)</span>)%Usi', '\2', $v);
  47. $v = preg_replace('%(\s+class="Mso[^"]+")%si', '', $v);
  48. $v = preg_replace('%( style="[^"]*mso[^>]*)%si', '', $v);
  49. $v = preg_replace('/<b><\/b>/', '', $v);
  50. return $v;
  51. }
  52. /**
  53. * stripTitleTag($title) 对文章标题进行过滤
  54. * @param string $v
  55. * @return string
  56. */
  57. function stripAuthorTag($v) {
  58. $v = preg_replace('/<a href=".+" target="\_blank">(.+)<\/a>/Usi', '\1', $v);
  59. return $v;
  60. }
  61. /**
  62. * mysqlString($str) 过滤数据
  63. * @param string $str
  64. * @return string
  65. */
  66. function mysqlString($str) {
  67. return addslashes(trim($str));
  68. }
  69. /**
  70. * init($min, $max) 入口程序方法,从 $min 页开始取,到 $max 页结束
  71. * @param int $min 从 1 开始
  72. * @param int $max
  73. * @return string 返回 URL 地址
  74. */
  75. function init($min=1, $max) {
  76. for ($i=$min; $i<=$max; $i++) {
  77. data("http://www.hqew.com/info-c10-{$i}.html");
  78. }
  79. }
  80. init(1, 500);  // 程序入口,从第一页开始抓,抓取500页
  81. ?>

通过上面的程序,就可以实现抓取华强电子网的资讯信息。

入口方法 init($min, $max) 如果想抓取 1-500 页面内容,那么 init(1, 500) 即可!这样,用不了多长时间,华强电子网的资讯就会全部抓取到数据库里面了。^_^

执行界面:

数据库:

转载于:https://www.cnblogs.com/lygsbbs/p/4371620.html

PHP 实现小偷程序相关推荐

  1. PHP万能小偷程序源码

    PHP万能小偷程序源码 源码,发出来大家共享一下,下面是采集车的官方介绍信息: 1.完全免费 采集车是一款完全免费的信息收集工具,我们本着团结共享的精神,尽量压缩建站成本. 2.高通用性 无论您是使用 ...

  2. XMLHTTP小偷程序原理

    小偷程序原理和简单示例 发表:2004-4-13 164720 出处:你的博客网(yourblog.org) 现在网上流行的小偷程序比较多,有新闻类小偷,音乐小偷,下载小偷,那么它们是如何做的呢,下面 ...

  3. php 小偷,php 小偷程序实例

    1.初识正则表达式 2.认识函数ereg(),eregi() 3.file_get_contents读取整个文件函数 但是读取部分文件时就不能用这种方法 用fread file_get_content ...

  4. java 小偷_浅谈小偷程序之Java

    浅谈小偷程序之Java 题外话:如果用EditPlus作为编辑器的话如果保存的格式默认为unicode的话那么在里面写中文用resin作为应用服务器的话就可能出现报500 Servlet错误哦!主要是 ...

  5. vivi采集php,php源码:VIVI万能小偷程序1.5 智能采集不求人(内置2条采集规则)

    好东西介绍: Warning: curl_setopt(): CURLOPT_FOLLOWLOCATION cannot be activated when an open_basedir is se ...

  6. 盗图+php,PHP小偷程序的设计与实现方法详解

    本文实例讲述了PHP小偷程序的设计与实现方法.分享给大家供大家参考,具体如下: 其实自己一直想做一个内涵图片的网站,以前的想法是做一个CMS,然后自己上传一些图片.. 开始真这么做的,没什么动力.之后 ...

  7. php基础九(通过cURL来做小偷程序)

    <!-- 第十五章 通过cURL来做小偷程序 --> <?php//如何请求微信.地图等第三方API呢?//这个时候就需要使用到--cURL.cURL中文翻译过来叫做基于URL的函数 ...

  8. 网站发布网(发布号) 海量热点新闻小偷程序 V1.2

    网站发布网(发布号) 海量热点新闻小偷程序 V1.2 PHP版小偷程序 海量数据 下载:https://www.qzqcw.com/qzqcw.zip 发布号新闻:https://www.qzqcw. ...

  9. 网站发布网(发布号) 自媒体新闻小偷程序伪静态版 V1.0

    网站发布网(发布号) 自媒体新闻小偷程序伪静态版 V1.0 演示:https://news.aikisport.com/ 下载:https://news.aikisport.com/wzfbw.rar ...

最新文章

  1. 如何查看用index.php,为什么整个网站使用一个index.php页面?
  2. VI和VIM编辑器深入学习笔记--基本vi命令
  3. Interference Signal 第八届
  4. python3教程廖雪峰云-python3基础教程廖雪峰云(如何规划研究生三年最后成为谷歌软件工程师)...
  5. 传递集合对象_面试必备——Java集合框架
  6. C++中String类的实现
  7. 鸿蒙系统怎么换windows,求助~鸿蒙系统windows环境搭建(hpm-cli安装失败)!
  8. mysql 视图 动态sql_sql-server – 使用动态Sql创建视图
  9. IDA 7.0 如何使用 IDAGolangHelper插件
  10. (19)脚手架工具Yeoman
  11. (51)多路时钟复用概述
  12. 挨踢部落坐诊第六期:机器学习如何判断突发情况?
  13. UVALive6929 Sums【数学】
  14. Vue + element + Springboot 通过邮箱找回密码
  15. Web小应用---网页聊天室
  16. mysql 联合主键_Mysql的联合主键
  17. PrimeNG安装使用
  18. Linux复制一个或多个文件到另一个目录下
  19. 标准正态分布函数数值表
  20. 使用codemirror打造你自己的前端在线编辑器

热门文章

  1. 大小写切换c语言程序设计教程课后答案,中国大学MOOC-翁恺-C语言程序设计习题集 05-0 到 06-3...
  2. MRP系统及行业的一些思考
  3. 5G无线设计:相控阵天线技术
  4. 基于redis实现秒杀并防止超卖
  5. 利用逻辑分析仪解析串口通讯数据
  6. 威力导演(PowerDirector Ultimate) 18中文版
  7. html表格中加入导航栏,用HTML中的列表标签做个导航栏吧
  8. java海伦公式求三角形面积_海伦公式求三角形面积出错求教
  9. 职称计算机ppt2003考点,【职称计算机《Powerpoint2003》考点:PPT的启动和退出】- 环球网校...
  10. 前端笔记(Html+CSS+JS+DOM+网页特效+jQuery+HTML5+CSS3+canvas 标签+web开发重难点+面向对象+AJAX)