您现在的位置:首页 >> 前端 >> 内容

猛抓点评网数据

时间:2012/4/13 10:54:41 点击:

  核心提示:/***@title :猛抓点评网数据*@Author:insun*@blog:http://yxmhero1989.blog.163.com*/项目需要抓取点评网的数据按往常的写php大概要累死,这...

/**

*@title :猛抓点评网数据

*@Author:insun

*@blog:http://yxmhero1989.blog.163.com

*/

猛抓点评网数据

项目需要 抓取点评网的数据 按往常的写php大概要累死,这时候不得不佩服火车头的采集能力。

 

免费版的最新是7.2 虽然只能Access数据库功能 但是很强大  而且我们可以先写入access数据 然后利用db2mysql软件导成sql语句导

 

入到Mysql。这样折腾就达到了收费版的效果。

 

火车头3个步骤都要勾选 要正确做好规则和数据库安排  耐心等待  只有网址爬出来  才能内容爬出来 继续发布出来

猛抓点评网数据

我们来走个流程,我们需要抓取这样的这些字段

猛抓点评网数据

先去大众点评网看看网页规则 挖掘下

 

上海区规则http://www.dianping.com/shanghai

全部频道

 

美食 (54841)  /search/category/1/10

休闲娱乐 (13371)/search/category/1/30

购物 (51060) /search/category/1/20 

丽人 (14027)  /search/category/1/50

结婚 (6674)   /search/category/1/55

亲子 (7333)  /search/category/1/70

运动健身 (3915) /search/category/1/45

酒店 (3368)    /search/category/1/60

爱车 (4870)    /search/category/1/65

生活服务 (22724) /search/category/1/80

 

 

美食

本帮江浙菜 (6553)  g101

川菜 (2587)    g102

粤菜 (1700)        g103

湘菜 (1121)        g104

东北菜 (682)       g106

贵州菜 (85)        g105

台湾菜 (339)       g107

新疆/清真 (344)    g108

西北菜 (119)       g26481

素菜 (104)         g109

火锅 (2011)    g110

自助餐 (404)       g111

小吃快餐 (22840)   g112

日本 (1786)        g113

韩国料理 (680)     g114

东南亚菜 (263)    g115

西餐 (2050)        g116

面包甜点 (6896)    g117

其他 (4994)        g118

 

 

 

卢湾区 (193)  g101r1

徐汇区 (456)  g101r2

静安区 (197) g101r3

长宁区 (323) g101r4

闵行区 (616) g101r12

浦东新区 (1255) g101r5

黄浦区 (326) g101r6

普陀区 (375) g101r7

闸北区 (297) g101r8

虹口区 (331) g101r9

杨浦区 (384) g101r10

宝山区 (470) g101r13

松江区 (275) g101r5937

嘉定区 (282) g101r5938

青浦区 (231) g101r5939

近郊 (504) g101r11

 

发现链接类似规律如下

food美食

http://www.dianping.com/search/category/1/10/g1(*)r(*)p(*)

life娱乐

http://www.dianping.com/search/category/1/30/g1(*)r(*)p(*)

* 0-10000

其他可附加

 

把上面链接现在第一步的起始地址里面。

至于各个字段的规则我都写好了,可以找我要

猛抓点评网数据

特别是有些很烦的字段,譬如说营业时间:

<dd class="J_info-edit-wrap" data-info-type="bh">    

 

 <span class="J_brief-cont">

<span class="J_full-cont">

<span class="J_full-cont no-info" data-is-empty="1">

3个都要替换为空吧

营业时间文字很长的话 会 <p class="J_full-cont Hide"> 又是很蛋疼。

 

然后就是第三步的内容发布。

 

发布可以发布为html格式的,以前版本System目录下有个html_tpl.html例子 可以改。现在没了,不过我写个你们看看就好了。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>[标签:标题]</title> <style> body { background-color:#F1F1F1;} td {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; color: #333333;line-height:180%; } </style> </head> <body> <table cellspacing="1" cellpadding="3" border="0" bgcolor="#666666" width="780" align="center"> <tr bgcolor="#FFFFFF"> <td align="center">火车采集器HTML导出模板</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:序号]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:区域]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:分类]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:商区]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:地区]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:商户名]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:地址]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:是否是分店]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:分店名]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:关联分店]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:电话]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:营业时间brief]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:营业时间hide]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:商户描述]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:公交信息]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:人均]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:综合口味]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:综合环境]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:综合服务]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:点评总人数]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:商户官方]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[标签:地图]</td> </tr> </table> </body> </html>

结果如下

猛抓点评网数据

保存数据库模式稍微复杂点。

我们来看免费版的保存为access发布。

猛抓点评网数据

由于Access很蛋疼,会出现很多错误,建议一般字段类型都设置为文本和描述类型,除了那个自增的id。另外不要出现一些关键字,出现了话建议使用[ ]括起来。

 

这样就不会出现下面的错误了:

猛抓点评网数据

 

========================================================================

INSERT INTO 语句的语法错误。Void ExecuteCommandTextErrorHandling(System.Data.OleDb.OleDbHResult)。===>关键字问题。

http://xianyun0216.blog.51cto.com/714887/152955

http://www.chinaret.com/user/topic_view.aspx?id=4d0e71fb-39c4-4693-8a59-4b89a5c09343

 

标准表达式中数据类型不匹配。Void ExecuteCommandTextErrorHandling(System.Data.OleDb.OleDbHResult)。===》之间都改为文本类型

http://blog.sina.com.cn/s/blog_4ab014680100cjq7.html

http://www.haogongju.net/art/961591

http://cnzc.cnblogs.com/archive/2004/07/09/22787.html

http://www.haogongju.net/art/961591

==========================================================================

 

 

保存的数据位access数据库 mdb格式的,07版本的话直接另存为mdb的就行了。如4.accdb ==>4.mdb 另存即可

把access数据库转换为sql语句进而导入mysql数据库,躲掉了收费的二货。

 

由Access版本转换为Mysql

http://zhidao.baidu.com/question/310685972.html

http://www.williamlong.info/archives/1057.html

 

 

component comdlg32.ocx or one its dependencies not correctly registered a file is missing or invalid

在windows7下注册COMDLG32.OCX

http://www.bsdlover.cn/?uid-1-action-viewspace-itemid-5893

 

这个db2mysql是vb编写的,win7 64bit会缺少ocx错误,winxp下不会。这个也很简单:

 comdlg32.ocx拷贝到目录c:\Windows\SysWOW64\,然后写个bat运行

@echo off

regsvr32 c:\Windows\SysWOW64\comdlg32.ocx

 

猛抓点评网数据

 

猛抓点评网数据

 

这样就把access转换成了sql语句。

 猛抓点评网数据

 

抓出来的数据后处理:

 

譬如最后一个map地图参数

 

我们一般是采集源码里面的poi     $位置

要转换为坐标:$地图x轴,$地图y轴

 

 

地图信息

mapData: {infoHTML: '<h3>\?<\/h3><p class=\"intro\">\静\安\区\镇\宁\?\号(\愚

\园\路\口) 52397878<\/p>',src: 

{closeBtn:'http://i1.dpfile.com/s/img/box_show_map_close.gif',printCSS:'http://i1.dpfile.com/s/c/c.shop.print.css'},po

i: 'IJRIERZVIVWUAT',hasEditAuth: false}

 

写个脚本:


<?php #echo $位置."\n"; #echo $地图x轴."\n"; #echo $地图y轴."\n"; $db_host="localhost";//服务器 $db_user="root";//用户名 $db_psw="";//密码 $db_name="dianping";//数据库名 $connection=mysql_connect($db_host,$db_user,$db_psw)or die("连接服务器失败"); mysql_select_db($db_name,$connection) or die("选择数据库失败"); mysql_query("set names'utf-8'");//utf8 set_time_limit(0);//防止超时。 $query="select * from dianping " ;// $queryresult=mysql_query($query) or die("查询数据失败");//执行查询 /* $row = mysql_fetch_array($queryresult); print_r($row['map']); */ while($row = mysql_fetch_array($queryresult)){ //print_r(decode('IJSFVSZVJARUGM')); //print_r(decode($row['map'])); $array = decode($row['map']); $string = $array['0'].",".$array['1']; echo $string."<br />"; $id = $row['id']; // $InsertQuery="insert into inspector(mid,inspector_mid) values('$model->mid','$item2') on duplicate key update inspector_mid=inspector_mid"; $UpdateQuery="update dianping set map = '$string' where id = '$id'"; $UpdateQueryResult=mysql_query($UpdateQuery) or die("查询数据失败");//执行查询 } function decode($poi) { $settings = array( 'digi'=> 16, 'add'=> 10, 'plus'=> 7, 'cha'=> 36, 'center'=> array( 'lat'=> 34.957995, 'lng'=> 107.050781, 'isDef'=> true ) ); $i = -1; $h = 0; $b = ""; $j = strlen($poi); $g = ord($poi{$j-1}); $c = substr($poi, 0, $j-1); $j--; for($e=0; $e<$j; $e++) { $d = base_convert($c{$e}, $settings['cha'], 10) - $settings['add']; if ($d>=$settings['add']) { $d = $d- $settings['plus']; } $b .= base_convert($d, 10, $settings['cha']); if ($d>$h) { $i = $e; $h = $d; } } $a = base_convert(substr($b, 0, $i), $settings['digi'], 10); $f = base_convert(substr($b, $i+1), $settings['digi'], 10); $l = ($a+$f - intval($g))/2; $k = ($f - $l)/100000; $l /= 100000; $lat = $k; $lng = $l; return array($lng, $lat); }

 

猛抓点评网数据

 

完事后mysql数据图:

 

猛抓点评网数据

 

猛抓点评网数据

 大量的数据导入的话不推荐使用phpmyadmin,insert的话推荐使用cmd命令行或者SQLyog。

 

猛抓点评网数据

 

 

附带一些简单的常见的火车头使用错误如下:

 

http://www.locoy.com/show.php?contentid=1694

该任务您没有选择采网址,采内容的任何步骤,请检查====》勾选左边三个

 

火车头数据库发布模块编辑器的使用

http://www.cnblogs.com/junzhongxu/archive/2009/04/30/1446719.html

 

7.0对编码为GB2312的页面采集出来保存本地文件是乱码,不论设置自动识别还是指定GB2312都是乱码。是你本地文件的模块编码设置错误 。要设置成UTF-8的====》保存的时候要对应好  用utf-8的时候都用utf-8,用GB2312的时候统一使用GB2312

作者:网络 来源:不详