摘要:愛回收網(wǎng)站,在網(wǎng)站中大量使用了動(dòng)態(tài)改變?cè)兀艺?qǐng)求的參數(shù)使用的是加密。工具火狐瀏覽器,開發(fā)者模式前面各個(gè)分類的分析還是比較簡(jiǎn)單,所需內(nèi)容都在網(wǎng)頁源碼中有,可以直接找到。主要是請(qǐng)求價(jià)格的過程有點(diǎn)復(fù)雜。
aihuishou
最近在qq群里看到有個(gè)小伙伴在問愛回收網(wǎng)站怎么爬取手機(jī)價(jià)格信息。
愛回收網(wǎng)站,在網(wǎng)站中大量使用了js動(dòng)態(tài)改變DOM元素,而且請(qǐng)求的參數(shù)使用的是paylaod加密。我們?cè)诜治鼍W(wǎng)站的時(shí)候看不到參數(shù),也就分析不出來請(qǐng)求參數(shù)的規(guī)律,這個(gè)問題可以通過fiddler抓包工具解決。剛開始分析確實(shí)有點(diǎn)懵,在此記錄下我的分析過程。
工具;火狐瀏覽器,開發(fā)者模式 Fiddler
前面各個(gè)分類的分析還是比較簡(jiǎn)單,所需內(nèi)容都在網(wǎng)頁源碼中有,可以直接找到。主要是請(qǐng)求價(jià)格的過程有點(diǎn)復(fù)雜。
首先看看網(wǎng)站是如何發(fā)送POST請(qǐng)求價(jià)格的
我們以http://www.aihuishou.com/prod...:
必須選擇要提交的選項(xiàng)才能提交查詢價(jià)格,這里我們隨便選擇幾個(gè)選項(xiàng),查找買免費(fèi)詢價(jià)的元素看到href是:
重點(diǎn)來了這里點(diǎn)擊免費(fèi)詢價(jià)之后,網(wǎng)站直接跳轉(zhuǎn)到價(jià)格的頁面網(wǎng)址是:http://www.aihuishou.com/pc/i...,我們來找下http://www.aihuishou.com/user...,
這時(shí)候發(fā)現(xiàn)沒有網(wǎng)址的請(qǐng)求,這時(shí)猜測(cè)是重定向了。這時(shí)候我們需要知道請(qǐng)求了什么導(dǎo)致重定向,打開fiddler,重新回到剛才,點(diǎn)擊免費(fèi)詢價(jià)。然后在fiddler中找到發(fā)送的http://www.aihuishou.com/user...:
可以發(fā)現(xiàn)是個(gè)post請(qǐng)求,返回的是一個(gè)json格式的數(shù)據(jù),我們看到里面有個(gè)redirectUrl,參數(shù)是"/pc/index.html#/inquiry/1516201064093351267”, 看到這個(gè)心中有沒有感到一喜,對(duì)比這個(gè)和跳轉(zhuǎn)后的頁面,發(fā)現(xiàn)驚奇的相似。訪問下這個(gè)網(wǎng)址,正是我們要找的價(jià)格的頁面。
此時(shí)是不是有點(diǎn)大功告成的感覺,然后我們?cè)陧撁嬷刑崛∥覀円臄?shù)據(jù),結(jié)果并沒有發(fā)現(xiàn),這時(shí)猜測(cè)可能是請(qǐng)求的是json數(shù)據(jù),然后動(dòng)態(tài)加載到頁面中的,這這是我們通過火狐瀏覽器的開發(fā)者功能,找到了真正數(shù)據(jù)的請(qǐng)求:
發(fā)現(xiàn)后面的數(shù)字就是url后面的數(shù)字,這是我們重新構(gòu)造這個(gè)http://www.aihuishou.com/port...。
現(xiàn)在整個(gè)過程明朗了,但是還有一個(gè)問題,最初的POST請(qǐng)求的參數(shù)怎么來的, 我們回過頭重新看下http://www.aihuishou.com/user...。
在火狐開發(fā)者模式下,我們可以看到免費(fèi)詢價(jià)這個(gè)元素對(duì)應(yīng)觸發(fā)的click事件,
function(a) {
a.preventDefault();
var l = $(this);
if (!l.hasClass("disabled") && W) {
if (!d.hasClass("hidden")) { var c = $.trim(o.val()); if (!s(c)) return; n.imgCaptcha = c } n.PriceUnits = e(), ahs.PopWindow.Loading(!0), $.post(r, n, function(e) { ahs.PopWindow.Hide(), e.code ? 3001 === e.code ? i(e.data.captchaUrl) : 3002 === e.code ? (t(e.data.captchaUrl), alert("驗(yàn)證碼有誤")) : e.data.redirectUrl && (location.href = e.data.redirectUrl) : location.href = e.data.redirectUrl })
}
}
可以看到j(luò)s中有個(gè)post請(qǐng)求,請(qǐng)求的參數(shù)是r, n,r應(yīng)該是請(qǐng)求的url,n是對(duì)應(yīng)的POST參數(shù),那么就要找到這個(gè)r, n,在js文件中,我們可以看到定義r, n參數(shù)的代碼,就在這個(gè)函數(shù)的上面定義了:
var r = $submit.attr("href"),
n = { AuctionProductId: $submit.data("pid"), ProductModelId: $submit.data("mid") };
這里我們可以看到r正是submit元素的href的值,n是submit元素屬性中包含"pid", "mid"的值,我們?cè)倏纯磃iddler抓到的參數(shù)應(yīng)該有三個(gè),還有一個(gè)priceUnits參數(shù),我們js代碼,發(fā)現(xiàn),n.PriceUnits = e(),這個(gè)便是
第三個(gè)參數(shù)的由來,在js中搜索function e,可以找到 函數(shù)e的定義:
function e() {
var e = [ ], t = [ ]; return $(".base-property").find("li.checked").each(function () { e.push($(this).data("id")) }), F ? (e = a(e, t), e = e.concat(O), e.join(";")) : (e = a(e, O), $(".appearance-property").find("li.checked").each(function () { t.push($(this).data("id")) }), c.filter(".function-property").find("li").each(function () { var e = $(this); t.push(e.hasClass("checked") ? e.data("id") : e.data("default")) }), e = e.concat(t), e.join(";")) }
大致的意思就是找到對(duì)應(yīng)元素下包含"id"的屬性的值加入到e的類表中,然后合并列表e,t,最后在用";"連接各元素。
這樣,POST請(qǐng)求的三個(gè)參數(shù)都找到了,這個(gè)網(wǎng)站訪問過快會(huì)有驗(yàn)證碼,可以加代理繞過代理驗(yàn)證。
至此,整個(gè)詢問價(jià)格的流程分析完成,還是由衷的感覺整個(gè)爬蟲懂點(diǎn)js還是好處多多的! 如果想讀源碼,請(qǐng)移步github,鏈接是:https://github.com/allenshen3...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41729.html
摘要:愛回收網(wǎng)站,在網(wǎng)站中大量使用了動(dòng)態(tài)改變?cè)兀艺?qǐng)求的參數(shù)使用的是加密。工具火狐瀏覽器,開發(fā)者模式前面各個(gè)分類的分析還是比較簡(jiǎn)單,所需內(nèi)容都在網(wǎng)頁源碼中有,可以直接找到。主要是請(qǐng)求價(jià)格的過程有點(diǎn)復(fù)雜。 aihuishou 最近在qq群里看到有個(gè)小伙伴在問愛回收網(wǎng)站怎么爬取手機(jī)價(jià)格信息。 愛回收網(wǎng)站,在網(wǎng)站中大量使用了js動(dòng)態(tài)改變DOM元素,而且請(qǐng)求的參數(shù)使用的是paylaod加密。我們...
摘要:內(nèi)存泄漏當(dāng)應(yīng)用內(nèi)部不再需要某個(gè)實(shí)例后,但是這個(gè)對(duì)象卻仍然被引用,這個(gè)情況就叫做內(nèi)存泄露。安卓虛擬機(jī)為每一個(gè)應(yīng)用分配一定的內(nèi)存空間,當(dāng)內(nèi)存泄露到達(dá)一定的程度就會(huì)造成內(nèi)存溢出。點(diǎn)擊登錄跳轉(zhuǎn)頁面中所有操作都與用戶密切相關(guān),是 Android: 今日頭條屏幕適配的原理? 1:首先計(jì)算出 density,計(jì)算公式:當(dāng)前設(shè)備屏幕總寬度(單位為像素)/ 設(shè)計(jì)圖總寬度(單位為 dp) = densit...
摘要:以下這些項(xiàng)目,你拿來學(xué)習(xí)學(xué)習(xí)練練手。當(dāng)你每個(gè)步驟都能做到很優(yōu)秀的時(shí)候,你應(yīng)該考慮如何組合這四個(gè)步驟,使你的爬蟲達(dá)到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學(xué)習(xí)不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲的設(shè)計(jì)方案,比如說。 (一)如何學(xué)習(xí)Python 學(xué)習(xí)Python大致可以分為以下幾個(gè)階段: 1.剛上手的時(shí)候肯定是先過一遍Python最基本的知識(shí),比如說:變量、數(shù)據(jù)結(jié)構(gòu)、語法...
摘要:瀏覽器顯示及交互背后的原理引子因?yàn)楣P者愛編程的光頭強(qiáng)近期在寫一本關(guān)于小程序入門的書籍。不基于瀏覽器背后的運(yùn)行原理,是很難說清楚虛擬被引入的真正原因和最大好處的。它是瀏覽器的核心部分。 瀏覽器顯示及交互背后的原理 引子 因?yàn)楣P者(愛編程的光頭強(qiáng))近期在寫一本關(guān)于小程序入門的書籍。其中有一章是介紹虛擬DOM的,它是位于Javascript和真正DOM之間的一層緩存層。為什么引入它,為什么它...
閱讀 5140·2021-09-07 09:58
閱讀 814·2019-08-30 15:55
閱讀 2978·2019-08-30 15:55
閱讀 952·2019-08-30 15:53
閱讀 1588·2019-08-29 12:57
閱讀 1887·2019-08-26 13:46
閱讀 592·2019-08-26 11:00
閱讀 3692·2019-08-23 15:42