• ----:)欢迎访问源码网(:----
    • 首页
    • 博客
    • 学院
    • 下载
    • 论坛
    • 影视
    • 发布源码
    • RSS
    • ITPig
    • 笑话网
    • 百家姓
    • 繁體中文

源码网 - 中国第一源码门户
选择镜像:网通镜像 - 电信主站
  • 首 页
  • 新闻动态
  • 网站运营
  • 网页制作
  • WEB开发
  • 编程开发
  • 图像媒体
  • 操作系统
  • 数据库
  • 服务器
热门搜索 优化 SEO 故事 cms IIS7 MySQL 个人 AdSense 主题推广 | 文章搜索: 高级搜索
会员登录/控制面版您的位置: 学院首页 >> 网站运营 >> 经验心得 >> 详细内容
 

推荐文章

  • 十种接近疯狂的站长
  • 百度——给站长的建站建议
  • 新手站长常犯的十大错误
 
 

热点文章

  • 十种接近疯狂的站长
  • hao123成功在哪里?
  • 图片站收入的赚钱小看法
  • 如何做网站链接? 做什么样的连接比较好
  • 一个个人信息港网站的发展历程
  • 我做垃圾站的一点体会
  • 灌水是论坛的灵魂--海峡钓鱼论坛5周年手记
  • 新站流量快速提高实战
  • 一个小站长穷站长的论坛经历
  • 域名选取十技巧
  • 十大通病制约个人网站的发展!
  • 搞地方网站已经半年的一些经历和体会
 
 

相关文章

 
 

百度搜索

 
 

名片网名片信息采集技术及过程

  • 阅览次数:
  • 文章来源: http://www.dssz.net
  • 原文作者: 牛魔王托世
  • 整理日期: 2007-12-15
  • 发表评论
  • 字体大小:
  • 小
  • 中
  • 大

    www.mingpian.com 是一个上传一张名片,就可以交换两张名片的网站,上面的明片信息据说有400W张以上了,登录“名片网”,可以查到世界500强等企业的管理层及员工名片。其中收录量高居榜首的是微软公司,2500多名员工的职位和联系方式赫然在列。以微软公司上海分公司为例,从前台接待到财务部经理到分公司总经理的手机号码和办公固定电话皆可一目了然,这似乎也成为“名片网”“实力”的的象征。正是有了这些珍贵的名片资源,这家“名片网”的月点击量才会高达500万以上。
    但如果你没有200w张名片,又如何跟他交换哪400W张呢?哪只有交钱了,交钱也不便宜,平均一块钱看一张。本文就教你如何免费把所有名片信息都采集下来,放到自已的数据库里,用来查询或统计信息都方便。又或者自已再弄个“明骗网”出来。
   
    采集难点:
    一、免费采集:首先就要看看这个网站的规则,“上传一张名片,就可以下载两张”,就是1:2的比例获得名片了,但我可没有这么多名片,哪只有上传假的名片了,因为他们是上传了名片,马上就送积分,并不是验证真假后才给你积分,你就可以利用这个时间差,用一张假的换两张真的名片了。
   
    二、名片ID没规律:他们的名片ID是以英文加数字的方式(/BizCard/E1C76E112031.aspx),并不是按线性数字增加的方式,并不连续的,而且还是12位长度,穷举是没可能的事了。我们只有通过搜索列表,提取ID的方式获得所有名片的ID了。
    三、搜索ID:这个网站如果帐号不是VIP会员,就只能搜索到前100张名片,也就是说,我们只有成为VIP会员才行了,要成为VIP方式有两个:交188元或者试用VIP(一周,要提供手机验证),要采集几百W张名片,并不是一两小时的事,名片网的网速并不快,采集几小时后被发现封帐号是很正常的事。所以,交钱或手机验证都是不可靠的。刚好他们的手机验证部分有漏洞,验证码为4位,可以通过穷举的方式,5分钟内就可以用任意一个手机号码通过验证。
   
    好了,现在就开始正式采集的过程了。
    1、首先,我们先把他们的地区目录的地区ID值取出来,下载 http://www.mingpian.com/Search/SearchArea.aspx到本地电脑。(get_page.php)
<?php
preg_replace("/CityID=(\d+?)\">(.+?)</ies", "GetArea('\\1', '\\2')", file_get_contents('http://www.mingpian.com/Search/SearchArea.aspx'));   

function GetArea($place, $name)
{
 global $area;
 $area[$place] = iconv("UTF-8", "GBK", $name);
}
?>
 上面这段代码就可以把地区ID保存到 $area 的数组里面。我们再打开 /Search/Search.aspx?CityID={$地区ID}&page=1 就可以把每个地区有多少张名片的记录取出来了。
 把这里的地区,地区名字,最大页数都存进数据库里
数据库脚本:
CREATE TABLE `mp` (
  `place` int(10) unsigned NOT NULL auto_increment,
  `area` varchar(100) character set latin1 collate latin1_bin NOT NULL default '',
  `page` int(10) unsigned NOT NULL default '0',
  PRIMARY KEY  (`place`),
) ENGINE=MyISAM;
 
 然后,我们通过以下代码,把每个地区的所有ID页面都保存到本地的电脑上面,
<?php //get_page.php
$result = $DB_site->query("SELECT * FROM mp");
while($row = $DB_site->fetch_array($result)){
 $newpath = __SITE_ROOT . "/mingpian/cardid/$row[place]";
 if(!is_dir($newpath) && !file_exists($newpath)){
  mkdir($newpath, 0777);
 }
 for($i = 1; $i <= $row['pages']; $i++){
  if($i > 25000) //Windows目录最多保存32768个文件,文件太多列目录时会当机,所以大于25000个文件时候,就要建新目录保存了
   $filename = $newpath . "/25000/$i.html";
  else
   $filename = $newpath . "/$i.html";
  echo $filename . "\n";
  if(!file_exists($filename) || filesize($filename) < 100) {
   $content = posttohost($row['place'], $i);  //这个函数就是用 file_get_contents("/Search/Search.aspx?CityID={$place}&page={$page}");
   $fp = fopen($filename, "w");
   fwrite($fp, $content);
   fclose($fp);
  }
 }
}
 2、下一步,我们就是把这所有列表的ID值取出来,保存到数据库里,因为ID值太多了,数据库处理起来比较方便点,要不然的话,PHP肯定要挂了(内存不足)
<?php //get_card.php
$result = $DB_site->query("SELECT * FROM mp");
while($row = $DB_site->fetch_array($result)){
 $newpath = __SITE_ROOT . "/mingpian/cardid/$row[place]";
 if(!is_dir($newpath) && !file_exists($newpath)){
  mkdir($newpath, 0777);
 }
 for($i = 1; $i <= $row['pages']; $i++){
  if($i > 25000)
   $filename = $newpath . "/25000/$i.html";
  else
   $filename = $newpath . "/$i.html";
  echo $filename . "\n";
  $content = implode("", file($filename));
  preg_replace("/BizCard\/(.+?)\.aspx\"[^>]*>(.+?)<\/a>/ies", "GetCardID('\\1', '\\2', $row[place])", $content);
 }
}

function GetCardID($id, $name, $place)
{
 global $DB_site;
 $name = iconv("UTF-8", "GBK", $name);
 echo "ID : $id Name : $name Place : $place\n";
 $DB_site->query("REPLACE INTO mp_card values ('$id', '" . addslashes($name) . "', '$place')");
}
?>

 
 数据库脚本:
DROP TABLE IF EXISTS `mp_card`;
CREATE TABLE `mp_card` (
  `id` varchar(20) NOT NULL,
  `name` varchar(50) NOT NULL,
  `place` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 3、跟着,我们先运行我们的充值代码,就是上传假的名片信息,好让我们的帐户增加积分。请参看:inc_cost.php,就是循环地上传名片信息,而且电话号码用随机数。
 4、同一时间,我们就可以从数据库里查找所有ID值,然后根据ID值一个一个的下载名片页面了。下载后并把数据库标志设为已下载。以便帐号被封的时候,我们不用从头再来嘛。文件代码在 buy_card.php里。
 5、在下载名片的时候,每隔十分钟看看新下载的文件,是否少于5K,就表示你的帐号被封了,把inc_cost.php跟buy_card.php停了,换个VIP帐号继续。
 另外:inc_cost.php跟buy_card.php最好使用两台电脑分别运行。
 
相关文件说明:
test_mobil.php //用任意手机号码通过验证成为名片网的VIP会员。一般5分钟就可以,就是循环穷举9999次。
get_page.php //取http://www.mingpian.com/Search/SearchArea.aspx里的地区ID及地区名称,保存到数据库
get_card.php //将所有名片列表页面保存到本地电脑,一般2小时就可以完成了
get_cardid.php //将名片列表里的名片ID值提取出来,并保存到数据库里面,视乎你的电脑速度,我的只用了10分钟。

以下两个文件循环执行(被封帐号后要修改里面的用户Cookie信息),这步骤可能要几天时间,视乎你的网速还有名片网的服务器速度。北京的朋友应该方便些,因为名片网的服务器就在北京!
inc_cost.php //上传假名片数据,获得积分。
buy_card.php //从数据据里查询名片ID值,下载名片信息,下载成功的ID设标志位,避免重复采集。

以上所有文件包下载地址:http://www.dssz.net/item/21377-ming_pian_wang_cai_ji_cheng_xu_yuan_dai_ma_bao.html

上一篇:PHP使用zlib扩展实现页面GZIP压缩输出
下一篇:构建支持Master/Slave读写分离的数据库操作类
  • 网友评论:
  • 查看所有评论
  • 我要发表评论
您的网名:
留言主题:
你要发表的内容:

 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 发布软件 | 帮助中心 | 源码论坛

Copyright © 2005-2007 CodePub.Com  程序支持:木翼  滇ICP备05005971号