工具有了,我要開始分析網頁了。
如上幾篇所言,我從這裡開始
www.ebay.ca/sch/Digita...c=96&rt=nc
右鍵點擊 “View Page Source”,再將顯示出來的html保存為mypage.html。
第一步是找關鍵信息,那就是產品名字,看看它在html文本中何處出現。
Ctrl + F,輸入“OLYMPUS TOUGH TG-620 12MP ”(該頁第一件產品),很快就定位了,還好幾處,不過都離得不遠 -- 基本上知道其前後幾行都是關於此產品的source code。
通過上下方信息基本判定一個產品信息block的界限
此例中,以 name="itemxxxxxx" 開始,到下一個name="itemxxxxx"結束
代碼: |
<a name="item4862735f85"></a>
<div class="lyr">
<div class="img l-shad lftd">
<table class="img">
<tbody><tr>
<td class="img" count="0" iid="310889373573">
<div class="multiImgHolder wpr">
<div class="imgWr">
<b></b>
<a href="http://www.ebay.ca/itm/OLYMPUS-TOUGH-TG-620-12MP-5x-WATERPROOF-DIGITAL-CAMERA-BLACK-250-/310889373573?pt=Digital_Cameras&hash=item4862735f85" title="Click this image to access OLYMPUS TOUGH TG-620 12MP 5x WATERPROOF DIGITAL CAMERA BLACK $250" class="img" itemprop="url">
<img itemprop="image"
src="http://thumbs2.ebaystatic.com/d/l225/m/mkFqOxCoT4m8OUH3lNWT-0g.jpg" class="img" alt='OLYMPUS TOUGH TG-620 12MP 5x WATERPROOF DIGITAL CAMERA BLACK $250' />
</a>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="ititle">
<h3>
<a href="http://www.ebay.ca/itm/OLYMPUS-TOUGH-TG-620-12MP-5x-WATERPROOF-DIGITAL-CAMERA-BLACK-250-/310889373573?pt=Digital_Cameras&hash=item4862735f85" class="vip " title="Click this link to access OLYMPUS TOUGH TG-620 12MP 5x WATERPROOF DIGITAL CAMERA BLACK $250" itemprop="name">OLYMPUS TOUGH TG-620 12MP 5x WATERPROOF DIGITAL CAMERA BLACK $250</a>
</h3>
</div>
<div class="prices">
<div class="bid">
<div class="timeLeftInfo">
</div>
<span
class="g-b amt"
itemprop="price"
><b>C $</b>23.50</span>
<span class="lbl">14 bids</span>
</div>
</div>
<div class="meta">
<div class="lrow">
</div>
<div class="clr"></div>
</div>
</div>
</div></div>
</div>
</td>
<td class="ic rsittlref" width="33%" r="2" >
<div class="itemOffered">
<div class="offers">
<div class="mimg itmcd itmcdV2" >
|
(接著來)
現在回顧一下我要做這個spider的主要目標是收集產品信息,通過分析網頁,我找到了產品描述的block,但裡面信息還是太多,那麼只有進一步分析了
關於產品,主要的應該是
1. 產品編號
2. 產品名稱
3. 產品圖片
首先定位產品編號,我很快注意到每一個產品block中有一個叫 “iid=(一串數字)”的字串,而且此(一串數字)同樣出現在其後一個URL中。
代碼: |
<td class="img" count="0" iid="310889373573">
|
代碼: |
<a href="http://www.ebay.ca/itm/OLYMPUS-TOUGH-TG-620-12MP-5x-WATERPROOF-DIGITAL-CAMERA-BLACK-250-/310889373573?pt=Digital_Cameras&hash=item4862735f85" title="Click this image to access OLYMPUS TOUGH TG-620 12MP 5x WATERPROOF DIGITAL CAMERA BLACK $250" class="img" itemprop="url">
|
,為了驗證這個就是產品編號,我把此數字(串)拷貝,然後回到ebay的主頁,在 Search中打入此字串,回車。。。哈哈,這時出現了一個產品的主頁面 -- 細看名字,果然與block中所找到的產品名字一致,那麼幾乎100%確定,這個iid就是產品編號。
為了確定這個iid=(一串數字)是唯一定義產品編號的地方,我進行了全文搜索,Ctrl + F,輸入“iid=”,search whole doc,可以看見所有 ‘iid=”都是遵循一個格式。雖然有重復,但這不會影響我的主要目標 -- 獲得該頁面上所有的產品編號
我有了文件source (html),也有了key “iid=(一串數字)”,那麼如何一次得到所有的iid數據呢?
因為做了全文搜索,可以看到所有iid的引用都是標准格式,那麼使用正則表達式函數去抓這些內容是再自然不過了
在使用code實現正則表達式之前,我一般喜歡用現成的工具先行測試reg expression的語法。
我用的工具就是前面介紹的Expresso (http://www.ultrapico.com/expresso.htm )
啟動程序,將網頁source整個copy/paste到expresso的sample text區域
接著是編寫測試regular expression 表達式。
通過分析得知,產品編號存在形式是 iid="111111111111",不多不少12個數字。
那麼很容易(如果你熟悉語法的話)寫成pattern: iid="[0-9]{12}"
run match
烏拉 。。。 Got them all!
請點擊圖片查看原圖
基本上到這裡,所有的分析工作已經完成。
下面就是編程實現的事了。
因為涉及具體的語言,library,因人而異,所以就不繼續往下了。
基本上,當你透過程序,抓到產品list頁面,然後分析該頁面,透過regular expression抓取到所有產品的編號,你就可以建立一個龐大的產品編號列表。
然後通過
www.ebay.ca/itm/[product iid]
你能快速訪問每一個ebay在售產品 。。。你想進一步做什麼。。。那就是你自己的目標了
:lol: