:猛抓點評網數據

/**
*@title :猛抓點評網數據
* @Author :insun
* @blog :http://yxmhero1989.blog.163.com
*/
猛抓點評網數據 - InSun - Minghacker is Insun
項目需要 抓取點評網的數據 按往常的寫php大概要累死,這時候不得不佩服火車頭的采集能力。
 
免費版的最新是7.2 雖然隻能Access數據庫功能 但是很強大  而且我們可以先寫入access數據 然後利用db2mysql軟件導成sql語句導
 
入到Mysql。這樣折騰就達到瞭收費版的效果。
 
火車頭3個步驟都要勾選 要正確做好規則和數據庫安排  耐心等待  隻有網址爬出來  才能內容爬出來 繼續發佈出來
猛抓點評網數據 - InSun - Minghacker is Insun
我們來走個流程,我們需要抓取這樣的這些字段
猛抓點評網數據 - InSun - Minghacker is Insun
先去大眾點評網看看網頁規則 挖掘下
 
上海區規則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
其他可附加
 
把上面鏈接現在第一步的起始地址裡面。
至於各個字段的規則我都寫好瞭,可以找我要
猛抓點評網數據 - InSun - Minghacker is Insun
特別是有些很煩的字段,譬如說營業時間:
<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個都要替換為空吧
營業時間文字很長的話 會 <div 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> <trbgcolor="#FFFFFF"> <td>[標簽:區域]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[標簽:分類]</td> </tr> <trbgcolor="#FFFFFF"> <td>[標簽:商區]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[標簽:地區]</td> </tr> <trbgcolor="#FFFFFF"> <td>[標簽:商戶名]</td> </tr> <tr bgcolor="#FFFFFF"> <td>[標簽:地址]</td> </tr> <trbgcolor="#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>

結果如下
猛抓點評網數據 - InSun - Minghacker is Insun
保存數據庫模式稍微復雜點。
我們來看免費版的保存為access發佈。
猛抓點評網數據 - InSun - Minghacker is Insun
由於Access很蛋疼,會出現很多錯誤, 建議一般字段類型都設置為文本和描述類型,除瞭那個自增的id。另外不要出現一些關鍵字,出現瞭話建議使用[ ]括起來。
 
這樣就不會出現下面的錯誤瞭:
猛抓點評網數據 - InSun - Minghacker is Insun
 
========================================================================
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
 
猛抓點評網數據 - InSun - Minghacker is Insun

 

猛抓點評網數據 - InSun - Minghacker is Insun
 
這樣就把access轉換成瞭sql語句。

 猛抓點評網數據 - InSun - Minghacker is Insun

 

抓出來的數據後處理:
 
譬如最後一個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'");//utf8set_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; returnarray($lng, $lat); }

 
猛抓點評網數據 - InSun - Minghacker is Insun
 
完事後mysql數據圖:
 
猛抓點評網數據 - InSun - Minghacker is Insun

 

猛抓點評網數據 - InSun - Minghacker is Insun

 大量的數據導入的話不推薦使用phpmyadmin,insert的話推薦使用cmd命令行或者SQLyog。

 
猛抓點評網數據 - InSun - Minghacker is Insun
 
 
附帶一些簡單的常見的火車頭使用錯誤如下:
 
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

转载于:https://my.oschina.net/qeecoo/blog/156737

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值