工具有了,我要开始分析网页了。
如上几篇所言,我从这里开始
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"结束
_BBCODE_CODE: |
<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中。
_BBCODE_CODE: |
<td class="img" count="0" iid="310889373573">
|
_BBCODE_CODE: |
<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: