内容简介: www.mingpian.com 是一个上传一张名片,就可以交换两张名片的网站,上面的明片信息据说有400w张以上了,登录名片网,可以查到世界500强等企业的治理层及员工名片。其中收录量高居榜首的是微软公司,2500多名员工的职位和联系方式赫然在列。以微软公司上海分公司为例,……
名片 过程 技术 采集 信息 id place newpath filename
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
|