開始抓yixun.com的商品信息,開始很開心,但一下子來了問題。
http請求回來的商品分類條目用<a href=>, 但這個href不能直接使用,因為頁面加載之后會啟動js程序(一般都是jquery)對頁面element進行配置和處理,例如:設置風格、事件等等。
yixun玩了個防頁面過期的小技巧:
>每個請求page在server都會產生一個有效期變量XY(具體算法不詳),
>如果獲取商品<a>直接請求,server將返回失敗,因為<a href>并未包含XY
>page加載完成之后js代碼設置<a>被點擊時觸發事件E,E將XY添加到<a href>內
>然后可以正確請求了
易迅防止請求頁面過期,在主頁中設置了一下參數:
<script type="text/javascript"> window.yPageId = '17384560'; window.yPageLevel = '2';</script>
在頁面內容中顯示
<a ytag="40037" target="_blank">路由器</a>
注意: 返回的html就是如此
但如果用戶點擊(左鍵或者右鍵)此 node對象時,js代碼會動態插入一個YTAG的變量
未點擊:
<a ytag="40037" target="_blank">路由器</a>
點擊:
<a ytag="40037" target="_blank">路由器</a>
變量生成方式在這個js中實現:
此js 使用了jquery,頁面完成加載之后,將配置頁面元素的onclick行為,如果點擊了頁面元素,將YTAG屬性加入到商品<a href=""/>中去
js代碼凌亂可以使用:
進行格式化觀察
js代碼:
G.header.search = { init: function() { G.header.search.event(); G.header.search.setInputStyle(); G.header.search.autoComplete(); },G.header.search.init();query: function() { var input = $("#q_show"), v = $.trim(input.val()), c = $("#cate_show").val(), ret = true, href = input.attr("_href"); if (v === G.header._Q_SHOW_DEF_TEXT && href) { window.location.href = href; ret = false; } else if (v === "" || v === G.header._Q_SHOW_DEF_TEXT) { if (!c || (c && c == "")) { input.focus(); ret = false;
} } if ($('#q_show').parents("form").find('input[name="YTAG"]').length === 0) { var ytag = $('#q_show').parents("form").find('input[type="submit"]').attr("ytag"); var YTAG = (window.yPageLevel || 0) + '.' + (window.yPageId || 0) + ytag; $('#q_show').parents("form").append($('<input type="hidden" name="YTAG" value="' + YTAG + '" />')); } return ret; }
程序定義了G.header.search對象,并進行初始化init() ,query()是用戶點擊查詢時觸發使用
init()內部配置了query函數,用于鼠標點擊時候生成YTAG屬性
看代碼就很簡單了
YTAG生成方式就是 window.yPageLevel+'.'+window.yPageId + <a ytag="40037">
這樣一個商品條目的href就獲得了