摘要:下一頁(yè)序號(hào)倒序概率名字當(dāng)前頁(yè)面全部數(shù)據(jù)鎖頻率使用,標(biāo)記上次時(shí)間鎖頻率步長(zhǎng),單位秒當(dāng)前頁(yè)鎖頻率步長(zhǎng)內(nèi)取消請(qǐng)求秒內(nèi)不要多次點(diǎn)擊哦。
阿里試用排序
抱歉,之前莫名其妙把配置文件給 ignore 了,已經(jīng)修復(fù),抱歉
前景提要說(shuō)來(lái)簡(jiǎn)直丟盡了鋼鐵直男的臉,沒(méi)錯(cuò),昨晚我在愉快的做著外包的活(中國(guó)移動(dòng)的小程序,自由職業(yè),喂),11點(diǎn)多了,女友突然腦子一抽:“你能不能幫我把這個(gè)玩意排序一下給我用啊,我好薅點(diǎn)羊毛,技術(shù)能實(shí)現(xiàn)嘛?”
我比較無(wú)奈的看了看,阿里試用咩?什么鬼,哦哦哦,就這玩意啊,爬蟲(chóng)爬一下就是了。我是前端……
回道:“沒(méi)問(wèn)題啊,爬蟲(chóng)唄。”
她:“哇,多久能做出來(lái)啊?”
我:“我現(xiàn)在在忙誒,1-2小時(shí)吧。”
她:“行了,你別忙了,趕緊幫我弄一下出來(lái)!”
我看了看她的臉,羞恥的最小化《微信開(kāi)發(fā)者工具》。。。
你要是覺(jué)得這也是廣告,那真是太抬舉我了。
爬蟲(chóng)搞起來(lái)NodeJS 爬蟲(chóng),百度一下,到處都是現(xiàn)成的代碼,我也就不一一分析了,拿出簡(jiǎn)書(shū)的一段代碼,來(lái)自 埃米莉Emily:
const express = require("express"); // 調(diào)用 express 實(shí)例,它是一個(gè)函數(shù),不帶參數(shù)調(diào)用時(shí),會(huì)返回一個(gè) express 實(shí)例,將這個(gè)變量賦予 app 變量。 const superagent = require("superagent"); const cheerio = require("cheerio"); const app = express(); app.get("/", (req, res, next) => { console.log(req) superagent.get("https://www.v2ex.com/") .end((err, sres) => { // 常規(guī)的錯(cuò)誤處理 if (err) { return next(err); } // sres.text 里面存儲(chǔ)著網(wǎng)頁(yè)的 html 內(nèi)容,將它傳給 cheerio.load 之后 // 就可以得到一個(gè)實(shí)現(xiàn)了 jquery 接口的變量,我們習(xí)慣性地將它命名為 `$` // 剩下就都是 jquery 的內(nèi)容了 let $ = cheerio.load(sres.text); let items = []; $(".item_title a").each((idx, element) => { let $element = $(element); items.push({ title: $element.text(), href: $element.attr("href") }); }); res.send(items); }); }); app.listen(3000, function () { console.log("app is listening at port 3000"); });
嘛,express 用 NodeJS 的不可能不知道,superagent 理解成可以在 Node 里面做對(duì)外請(qǐng)求即可,cheerio 嗯,Node 專(zhuān)用 JQ。
首爬把上面的請(qǐng)求地址換成:https://try.taobao.com/,查看頁(yè)面標(biāo)簽結(jié)構(gòu),找到想要的選擇器結(jié)構(gòu):
.tb-try-wd-item-info > .detail,把這個(gè)替換上面選擇器 .item_title a,走起:
……我不想展示結(jié)果,因?yàn)橹挥辛鶄€(gè),頁(yè)面實(shí)際展示是 10 個(gè),找了半天,發(fā)現(xiàn)兩個(gè)問(wèn)題:
如上,第一個(gè)是爬到的 6 個(gè)是推薦,喵的,不是下面列表;
第二個(gè),下面列表是后面通過(guò) POST 多帶帶請(qǐng)求來(lái)的數(shù)據(jù),怎么看都是某框架的 SSR 干的好事。
于是爬蟲(chóng)不成,得換戰(zhàn)略。
模擬 POSTOK,既然是 POST,就好弄了,直接把連接跟參數(shù)刨出來(lái),然后 superagent 模擬:
superagent .post( `https://try.taobao.com/api3/call?what=show&page=${paylaod.page}&pageSize&api=x%2Fsearch` ) .set("content-type", "application/x-www-form-urlencoded; charset=UTF-8") .end((err, sres) => { // 常規(guī)的錯(cuò)誤處理 if (err) { return next(err) } const result = JSON.parse(sres.text).result // 返回結(jié)構(gòu)樹(shù) resolve(result) })
content-type 源自:
哼哼哼,你沒(méi)猜錯(cuò),失敗了,如下:
想想是必然的,怎么可能給你隨便請(qǐng)求呢,然后該怎么做?研究?nonono,老夫上來(lái)就是一梭子,不就是 Content-Type 么!
superagent .post( `https://try.taobao.com/api3/call?what=show&page=${paylaod.page}&pageSize&api=x%2Fsearch` ) .set( "user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" ) .set("accept", "pplication/json, text/javascript, */*; q=0.01") .set("accept-encoding", "gzip, deflate, br") .set( "accept-language", "zh-CN,zh;q=0.9,en;q=0.8,la;q=0.7,zh-TW;q=0.6,da;q=0.5" ) // .set("content-length", "8") .set("content-type", "application/x-www-form-urlencoded; charset=UTF-8") .set( "cookie", "your cookie" ) .set("origin", "https://try.taobao.com") .set("referer", "https://try.taobao.com") .set("x-csrf-token", "f0b8e7443eb7e") .set("x-requested-with", "XMLHttpRequest") .end((err, sres) => { // 常規(guī)的錯(cuò)誤處理 if (err) { return next(err) } const result = JSON.parse(sres.text).result resolve(result) })
依據(jù)就是下面這個(gè):
不就是頭么,不就是源么,不就是用戶(hù)代理么,用個(gè) HTTPS 還沒(méi)有你辦法了?
注意上面 .set("content-length", "8"),不知道那邊怎么玩,加上這個(gè)就超時(shí)……
于是,交代了吧:
{ "pages": { "paging": { "n": 2182, "page": 1, "pages": 219 }, "items": [ { "shopUserId": "2450112357", "title": "凱度高端款嵌入式蒸烤箱", "status": 1, "totalNum": 1, "requestNum": 15530, "acceptNum": 0, "reportNum": 0, "isApplied": false, "shopName": "casdon凱度旗艦店", "showId": "2561626", "startTime": 1539619200000, "endTime": 1540220400000, "id": "34530215", "type": 1, "pic": "http://img.alicdn.com/bao/uploaded/TB1ycS2eMDqK1RjSZSyXXaxEVXa.jpg", "shopItemId": "559771706359", "price": 13850 }, { "shopUserId": "3189770892", "title": "皇家美素佳兒老包裝2段400g", "status": 1, "totalNum": 50, "requestNum": 2079, "acceptNum": 0, "reportNum": 0, "isApplied": false, "shopName": "皇家美素佳兒旗艦店", "showId": "2551240", "startTime": 1539619200000, "endTime": 1540220400000, "id": "34396042", "type": 1, "pic": "http://img.alicdn.com/bao/uploaded/TB1YrSZaVYqK1RjSZLeXXbXppXa.jpg", "shopItemId": "547114874458", "price": 189 }, { "shopUserId": "1077716829", "title": "關(guān)注店鋪優(yōu)先審水密碼幻彩隔離", "status": 1, "totalNum": 10, "requestNum": 6907, "acceptNum": 0, "reportNum": 0, "isApplied": false, "shopName": "水密碼旗艦店", "showId": "2568391", "startTime": 1539619200000, "endTime": 1540220400000, "id": "34784086", "type": 1, "pic": "http://img.alicdn.com/bao/uploaded/TB16_4ChmzqK1RjSZPxXXc4tVXa.jpg", "shopItemId": "559005882880", "price": 599 }, { "shopUserId": "725786863", "title": "精品皮草派克大衣", "status": 1, "totalNum": 1, "requestNum": 11793, "acceptNum": 0, "reportNum": 0, "isApplied": false, "shopName": "美瑞蓓特", "showId": "2557886", "startTime": 1539619200000, "endTime": 1540220400000, "id": "34574078", "type": 1, "pic": "http://img.alicdn.com/bao/uploaded/TB1zVLMdCrqK1RjSZK9XXXyypXa.jpg", "shopItemId": "577418950477", "price": 5980 }, { "shopUserId": "3000840351", "title": "保友智能新品Pofit電腦椅", "status": 1, "totalNum": 1, "requestNum": 12895, "acceptNum": 0, "reportNum": 0, "isApplied": false, "shopName": "保友辦公家具旗艦店", "showId": "2557100", "startTime": 1539619200000, "endTime": 1540220400000, "id": "34528042", "type": 1, "pic": "http://img.alicdn.com/bao/uploaded/TB1bYZEg6TpK1RjSZKPXXa3UpXa.png", "shopItemId": "577598687971", "price": 5408 }, { "shopUserId": "791732485", "title": "TEK手持吸塵器A8", "status": 1, "totalNum": 1, "requestNum": 17195, "acceptNum": 0, "reportNum": 0, "isApplied": false, "shopName": "泰怡凱旗艦店", "showId": "2552265", "startTime": 1539619200000, "endTime": 1540220400000, "id": "34444014", "type": 1, "pic": "http://img.alicdn.com/bao/uploaded/TB1D6bWbhTpK1RjSZFGXXcHqFXa.jpg", "shopItemId": "547653053965", "price": 5199 }, { "shopUserId": "3229583972", "title": "椰富海南冷炸椰子油食用油1L", "status": 1, "totalNum": 20, "requestNum": 4451, "acceptNum": 0, "reportNum": 0, "isApplied": false, "shopName": "椰富食品專(zhuān)營(yíng)店", "showId": "2561698", "startTime": 1539619200000, "endTime": 1540220400000, "id": "34532250", "type": 1, "pic": "http://img.alicdn.com/bao/uploaded/TB1VjLSePDpK1RjSZFrXXa78VXa.jpg", "shopItemId": "578653506446", "price": 256 }, { "shopUserId": "855223948", "title": "卡西歐立式家用電鋼琴PX770", "status": 1, "totalNum": 1, "requestNum": 16762, "acceptNum": 0, "reportNum": 0, "isApplied": false, "shopName": "世紀(jì)音緣樂(lè)器專(zhuān)營(yíng)店", "showId": "2551326", "startTime": 1539619200000, "endTime": 1540220400000, "id": "34420041", "type": 1, "pic": "http://img.alicdn.com/bao/uploaded/TB1CC6aa9zqK1RjSZFpXXakSXXa.jpg", "shopItemId": "562405126383", "price": 4838 }, { "shopUserId": "4065939832", "title": "關(guān)注寶貝送輕奢沙發(fā)床", "status": 1, "totalNum": 1, "requestNum": 17436, "acceptNum": 0, "reportNum": 0, "isApplied": false, "shopName": "貝兮旗艦店", "showId": "2559904", "startTime": 1539619200000, "endTime": 1540220400000, "id": "34532170", "type": 1, "pic": "http://img.alicdn.com/bao/uploaded/TB1AzxYegHqK1RjSZFPXXcwapXa.jpg", "shopItemId": "577798067313", "price": 4399 }, { "shopUserId": "807974445", "title": "森海塞爾CX6藍(lán)牙耳機(jī)", "status": 1, "totalNum": 4, "requestNum": 22557, "acceptNum": 0, "reportNum": 0, "isApplied": false, "shopName": "sennheiser旗艦店", "showId": "2559701", "startTime": 1539619200000, "endTime": 1540220400000, "id": "34532161", "type": 1, "pic": "http://img.alicdn.com/bao/uploaded/TB1HET6d7voK1RjSZFwXXciCFXa.jpg", "shopItemId": "564408956766", "price": 999 } ] } }
細(xì)心的小伙伴應(yīng)該看到,我沒(méi)有發(fā)送 form 給他,一樣可以請(qǐng)求到需要的數(shù)據(jù),page 掛在了 query 上……
展示部分數(shù)據(jù)拿到,就簡(jiǎn)單了,其實(shí)就是這一個(gè)接口實(shí)現(xiàn)剩下的功能了,沒(méi)錯(cuò),記住我是前端。
tb try
序號(hào)(倒序) | 概率 | 名字 |
---|
長(zhǎng)這個(gè)樣子:
我多人性化,可以點(diǎn)擊跳轉(zhuǎn)、概率超過(guò) 5% 紅色展示、還告訴你當(dāng)前所在頁(yè)碼、點(diǎn)太快還給你提示………………………………
就是這么好用,喜歡的趕緊體驗(yàn)吧!
線(xiàn)上:點(diǎn)我體驗(yàn)
Github: Spider
覺(jué)得有用,不要吝惜 star 哦。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/108663.html
摘要:下一頁(yè)序號(hào)倒序概率名字當(dāng)前頁(yè)面全部數(shù)據(jù)鎖頻率使用,標(biāo)記上次時(shí)間鎖頻率步長(zhǎng),單位秒當(dāng)前頁(yè)鎖頻率步長(zhǎng)內(nèi)取消請(qǐng)求秒內(nèi)不要多次點(diǎn)擊哦。 阿里試用排序 抱歉,之前莫名其妙把配置文件給 ignore 了,已經(jīng)修復(fù),抱歉 前景提要 說(shuō)來(lái)簡(jiǎn)直丟盡了鋼鐵直男的臉,沒(méi)錯(cuò),昨晚我在愉快的做著外包的活(中國(guó)移動(dòng)的小程序,自由職業(yè),喂),11點(diǎn)多了,女友突然腦子一抽:你能不能幫我把這個(gè)玩意排序一下給我用啊,我好...
摘要:下一頁(yè)序號(hào)倒序概率名字當(dāng)前頁(yè)面全部數(shù)據(jù)鎖頻率使用,標(biāo)記上次時(shí)間鎖頻率步長(zhǎng),單位秒當(dāng)前頁(yè)鎖頻率步長(zhǎng)內(nèi)取消請(qǐng)求秒內(nèi)不要多次點(diǎn)擊哦。 阿里試用排序 抱歉,之前莫名其妙把配置文件給 ignore 了,已經(jīng)修復(fù),抱歉 前景提要 說(shuō)來(lái)簡(jiǎn)直丟盡了鋼鐵直男的臉,沒(méi)錯(cuò),昨晚我在愉快的做著外包的活(中國(guó)移動(dòng)的小程序,自由職業(yè),喂),11點(diǎn)多了,女友突然腦子一抽:你能不能幫我把這個(gè)玩意排序一下給我用啊,我好...
摘要:有朋友介紹了阿里云日本東京的主機(jī)開(kāi)放購(gòu)買(mǎi),價(jià)格還算便宜,于是就在上個(gè)月把網(wǎng)站搬家到日本阿里云上。試用過(guò)了阿里云日本主機(jī),發(fā)現(xiàn)阿里云日本用的是日本軟銀和香港線(xiàn)路,這兩條線(xiàn)路目前來(lái)看是訪(fǎng)問(wèn)國(guó)內(nèi)訪(fǎng)問(wèn)日本比較理想的線(xiàn)路。一直以來(lái),阿里云的VPS主機(jī)以?xún)r(jià)格便宜、后臺(tái)控制面板方便實(shí)用的特點(diǎn)吸引著我去用,之前一直是將wzfou.com放在阿里云香港VPS上,但是在使用過(guò)程中逐漸發(fā)現(xiàn)了兩個(gè)問(wèn)題:一是VPS主...
摘要:小韓坐在我的對(duì)面喃喃的說(shuō)道。彬哥,我是不是錯(cuò)了,如果再給我一次機(jī)會(huì),我一定會(huì)拉住她,告訴她其實(shí)她比工作更重要。小韓,突然間對(duì)我說(shuō)我覺(jué)得我生活和工作的混亂,并不是因?yàn)榉泵Γ俏易约壕蛷膩?lái)沒(méi)有仔細(xì)去想還有就是對(duì)時(shí)間安排的不合理。 showImg(https://segmentfault.com/img/bV1DqS?w=3500&h=2205); 我不戴金箍,救不了她,戴了金箍,愛(ài)不了她...
摘要:小韓坐在我的對(duì)面喃喃的說(shuō)道。彬哥,我是不是錯(cuò)了,如果再給我一次機(jī)會(huì),我一定會(huì)拉住她,告訴她其實(shí)她比工作更重要。小韓,突然間對(duì)我說(shuō)我覺(jué)得我生活和工作的混亂,并不是因?yàn)榉泵Γ俏易约壕蛷膩?lái)沒(méi)有仔細(xì)去想還有就是對(duì)時(shí)間安排的不合理。 showImg(https://segmentfault.com/img/bV1DqS?w=3500&h=2205); 我不戴金箍,救不了她,戴了金箍,愛(ài)不了她...
閱讀 3229·2021-11-11 16:55
閱讀 2490·2021-10-13 09:39
閱讀 2424·2021-09-13 10:27
閱讀 2163·2019-08-30 15:55
閱讀 3088·2019-08-30 15:54
閱讀 3133·2019-08-29 16:34
閱讀 1827·2019-08-29 12:41
閱讀 1072·2019-08-29 11:33