【爬蟲(chóng)成長(zhǎng)之路】(五)【大眾點(diǎn)評(píng)】瀏覽器掃碼登錄+油猴直接爬取數(shù)據(jù)

本系列文章共十篇:

【爬蟲(chóng)成長(zhǎng)之路】(一)爬蟲(chóng)系列文章導(dǎo)讀
【爬蟲(chóng)成長(zhǎng)之路】(二)各篇需要用到的庫(kù)和工具
【爬蟲(chóng)成長(zhǎng)之路】(三)【大眾點(diǎn)評(píng)】selenium爬蟲(chóng)
【爬蟲(chóng)成長(zhǎng)之路】(四)【大眾點(diǎn)評(píng)】selenium登錄+requests爬取數(shù)據(jù)
【爬蟲(chóng)成長(zhǎng)之路】(五)【大眾點(diǎn)評(píng)】瀏覽器掃碼登錄+油猴直接爬取數(shù)據(jù)
【爬蟲(chóng)成長(zhǎng)之路】(六)【大眾點(diǎn)評(píng)】mitmproxy中間人代理爬蟲(chóng)
【爬蟲(chóng)成長(zhǎng)之路】(七)【大眾點(diǎn)評(píng)】PC微信小程序+requests爬取數(shù)據(jù)
【爬蟲(chóng)成長(zhǎng)之路】(八)【大眾點(diǎn)評(píng)】安卓APP爬蟲(chóng)

本文需要用到的工具:瀏覽器F12控制臺(tái)
本文需要用到的庫(kù):無(wú)

爬取目標(biāo)數(shù)據(jù):

  1. 指定城市的店鋪列表及其評(píng)分?jǐn)?shù)據(jù)
  2. 指定店鋪下的用戶(hù)評(píng)論數(shù)據(jù)

一织盼、需求分析

這一篇總共需要爬取兩個(gè)頁(yè)面的數(shù)據(jù)蔼紧,分別是:

  1. 某城市的店鋪列表頁(yè)面
  2. 某店鋪的評(píng)論列表頁(yè)面

二搁骑、獲取目標(biāo)頁(yè)面的URL

這里與前面獲取的URL稍有不同,不需要用到登錄的URL了哨鸭,只需要編寫(xiě)能夠匹配店鋪?lái)?yè)面和評(píng)論頁(yè)面的URL即可,如下:

# 這樣就能夠匹配到點(diǎn)評(píng)的全部頁(yè)面了
// @match        http://www.dianping.com/*

三、分析文檔結(jié)構(gòu)系馆,使用油猴插件提取數(shù)據(jù)

這里需要簡(jiǎn)單的JS語(yǔ)法知識(shí),在前端就可以將要獲取的數(shù)據(jù)提取出來(lái)顽照,后端就只進(jìn)行接收操作就好了由蘑。如果不知道如何編寫(xiě)油猴插件的話,可以去學(xué)一下怎么寫(xiě)油猴插件代兵,這個(gè)會(huì)JS的話很快就能上手了尼酿。

四、編寫(xiě)程序

這里由于是使用油猴插件植影,所以操作起來(lái)幾乎和人在操作一樣裳擎,服務(wù)器后臺(tái)無(wú)法察覺(jué)出來(lái),所以只要頻率不太快何乎,幾乎不會(huì)存在反爬的問(wèn)題句惯,這種方式編寫(xiě)的爬蟲(chóng)能夠爬取任何WEB頁(yè)面,但缺點(diǎn)就是速度比較慢支救,和selenium一樣抢野,都需要瀏覽器的介入才能完成爬取。

在前端獲取到數(shù)據(jù)后各墨,可以傳遞到后臺(tái)進(jìn)行處理指孤,這里就不提供后端程序的代碼了,比較簡(jiǎn)單,搭建一個(gè)簡(jiǎn)單的服務(wù)就好了恃轩。

油猴插件代碼:

// ==UserScript==
// @name         dianping_spider
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  爬取大眾點(diǎn)評(píng)店鋪信息和用戶(hù)評(píng)論
// @author       keep1234quiet
// @match        http://www.dianping.com/*
// @match        http://www.dianping.com/shop/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @require       https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js
// @run-at       document-idle
// @grant        GM_xmlhttpRequest
// ==/UserScript==

(function() {
    'use strict';

    console.log("點(diǎn)評(píng)爬蟲(chóng)插件啟動(dòng)成功结洼!");
    var shop_page = document.getElementsByClassName("txt");
    var review_page = $(".review-list-main");
    var page,data,score;

    if(shop_page.length != 0){  // 判斷是否是店鋪詳情頁(yè)
        console.log("當(dāng)前頁(yè)面:店鋪列表頁(yè)");
        page = "shop";
        var shop_list = [];
        for (var i = shop_page.length - 1; i >= 0; i--) {
            var shop = shop_page[i];
            var shopname = shop.getElementsByTagName("h4")[0].innerText;
            score = shop.getElementsByClassName("star_score")[0].innerText;
            shop_list.push({'name': shopname, 'score': score});
        }
        data = {"page": page, "data":shop_list};
        console.log(shop_list);

    }
    else if(review_page){   // 判斷是否是評(píng)論頁(yè)
        console.log("當(dāng)前頁(yè)面:評(píng)論頁(yè)");
        page = "comment";
        var comment_list = [];  // 存放當(dāng)前頁(yè)提取的的評(píng)論信息
        var userlist = $(".reviews-items>ul>li");
        for (var i = userlist.length - 1; i >= 0; i--) {
            var user = userlist[i];
            var username = user.getElementsByClassName("dper-info")[0].innerText;
            var item_list = user.getElementsByClassName("score")[0].getElementsByClassName("item");
            score = [];
            for (var j = item_list.length - 1; j >= 0; j--) {
                score.push(item_list[j].innerText);
            }
            var content = user.getElementsByClassName("review-words")[0].innerText.trim();
            comment_list.push({'username':username, 'score': score, 'content': content});
        }
        data = {"page": page, "data": comment_list};
        console.log("comment_list=",comment_list);
    }
    else{
        page = "unkown";
        console.log("unkown page");
    }

    //setInterval(refresh, 1000*30);//30s 刷新一次

    function refresh()
    {
        window.location.reload();
    }

    var sleep = function(time) {
        var startTime = new Date().getTime() + parseInt(time, 10);
        while(new Date().getTime() < startTime) {}
    };

    GM_xmlhttpRequest({
        method:'POST',
        url:"http://127.0.0.1:8000/index/?name=spider",
        data:JSON.stringify(data),
        dataType:"json",
        headers:{
            "Content-Type":"application/json"
        },
        onload:function(response){
            var next_url = response.responseText;
            sleep(3000);
            //window.location.href = next_url;
            //window.location.reload(next_url);
        }
    });
    console.log("刷新成功");

})();

五、程序運(yùn)行結(jié)果

安裝好油猴插件叉跛,并將代碼寫(xiě)入腳本中松忍,瀏覽器打開(kāi)店鋪列表頁(yè)面和用戶(hù)評(píng)論頁(yè)面就會(huì)自動(dòng)爬取了,如果要做批量爬取筷厘,需要自己再修改下程序鸣峭。

以下是程序運(yùn)行結(jié)果:

油猴插件獲取到的店鋪數(shù)據(jù)
油猴插件獲取到的評(píng)論數(shù)據(jù)

六、優(yōu)缺點(diǎn)分析

序號(hào) 優(yōu)點(diǎn) 缺點(diǎn)
1 程序編寫(xiě)簡(jiǎn)單 運(yùn)行速度慢
2 幾乎沒(méi)有反爬問(wèn)題酥艳,不用構(gòu)造參數(shù) -

注:

  1. 如果您不希望我在文章提及您文章的鏈接摊溶,或是對(duì)您的服務(wù)器造成了損害,請(qǐng)聯(lián)系我對(duì)文章進(jìn)行修改充石;
  2. 本文僅爬取公開(kāi)數(shù)據(jù)莫换,不涉及到用戶(hù)隱私;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末骤铃,一起剝皮案震驚了整個(gè)濱河市拉岁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌劲厌,老刑警劉巖膛薛,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件听隐,死亡現(xiàn)場(chǎng)離奇詭異补鼻,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)雅任,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)风范,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人沪么,你說(shuō)我怎么就攤上這事硼婿。” “怎么了禽车?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵寇漫,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我殉摔,道長(zhǎng)州胳,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任逸月,我火速辦了婚禮栓撞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己瓤湘,他們只是感情好瓢颅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著弛说,像睡著了一般挽懦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上木人,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天巾兆,我揣著相機(jī)與錄音,去河邊找鬼虎囚。 笑死角塑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的淘讥。 我是一名探鬼主播圃伶,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蒲列!你這毒婦竟也來(lái)了窒朋?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蝗岖,失蹤者是張志新(化名)和其女友劉穎侥猩,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體抵赢,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡欺劳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铅鲤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片划提。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖邢享,靈堂內(nèi)的尸體忽然破棺而出鹏往,到底是詐尸還是另有隱情,我是刑警寧澤骇塘,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布伊履,位于F島的核電站,受9級(jí)特大地震影響款违,放射性物質(zhì)發(fā)生泄漏唐瀑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一奠货、第九天 我趴在偏房一處隱蔽的房頂上張望介褥。 院中可真熱鬧,春花似錦、人聲如沸柔滔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)睛廊。三九已至形真,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間超全,已是汗流浹背咆霜。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嘶朱,地道東北人蛾坯。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像疏遏,于是被迫代替她去往敵國(guó)和親脉课。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容