本系列文章共十篇:
【爬蟲(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ù):
- 指定城市的店鋪列表及其評(píng)分?jǐn)?shù)據(jù)
- 指定店鋪下的用戶(hù)評(píng)論數(shù)據(jù)
一织盼、需求分析
這一篇總共需要爬取兩個(gè)頁(yè)面的數(shù)據(jù)蔼紧,分別是:
- 某城市的
店鋪列表
頁(yè)面 - 某店鋪的
評(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é)果:
六、優(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ù) | - |
注:
- 如果您不希望我在文章提及您文章的鏈接摊溶,或是對(duì)您的服務(wù)器造成了損害,請(qǐng)聯(lián)系我對(duì)文章進(jìn)行修改充石;
- 本文僅爬取公開(kāi)數(shù)據(jù)莫换,不涉及到用戶(hù)隱私;