如何用google app script登入網頁執行爬蟲(How to use google app script crawler web with login)

如何用google app script登入網頁執行爬蟲(How to use google app script crawler web with login)

上一次我們介紹了如何用google app script登入網頁執行爬蟲,而這次我們要進階運用cookie偽裝登入網站爬蟲!那廢話不多說我們開始吧!

程式碼解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
function fetch() {
// login page 登入頁面
var loginURL = 'https://loginURL';
// you want to get the data from the page 資料頁面
var dataURL = 'https://dataURL';
// login data setValue 設定登入資訊
var loginPayload = {
'email':'email@gmail.com',
'password':"password",
};
// use post login 設定登入模式
var loginOptions = {'method':'post','payload':loginPayload,'followredirects':false};
var loginResponse = UrlFetchApp.fetch(loginURL,loginOptions);
//save cookie 儲存cookie資訊
var loginHeaders = loginResponse.getAllHeaders();
var cookie = [loginResponse.getAllHeaders()["Set-Cookie"]];
cookie[0] = cookie[0].split(";")[0];
cookie = cookie.join(";");
// get data page value 設定資料頁面資訊
var loadPayload = {
'page': 0,
'pageSize': 30,
};
//use cookie login and get data 用cookie獲取資料頁面的資訊
var dataHeaders = {'Cookie':cookie};
var dataGetOptions = {'method':'get','headers':dataHeaders};
var dataOptions = {'method':'post','headers':dataHeaders,'payload':loadPayload,'followredirects':false,'muteHttpExceptions': true};
var dataResponse = UrlFetchApp.fetch(dataURL,dataOptions);
var json = decodeURIComponent(dataResponse.getBlob().getDataAsString());

var id_array = new Array(30);
id_array = get_latest_new(json);
for(var data_i = 0; data_i < id_array.length; data_i++){
try{
var imgURL = 'https://imgurl/' + id_array[data_i].toString();
dataResponse = UrlFetchApp.fetch(imgURL,dataOptions);
//get ResponseCode 確認網頁狀態
if (dataResponse.getResponseCode() == 200){
get_img(dataResponse,id_array[data_i].toString());
}
else if (dataResponse.getResponseCode() == 404){
null;
}
else if (dataResponse.getResponseCode() == 500){
null;
}
else if (dataResponse.getResponseCode() == 502){
null;
}
else{
MailApp.sendEmail("email@gmail.com", "getResponseCode",dataResponse.getResponseCode());
}
}
catch(e){
MailApp.sendEmail("email@gmail.com", "get_img_error",e);
}
}
}

心得說明

由於這次分幾個階段,從登入頁面、設定登入資料、從登入驗證後存取cookie、將cookie帶入到資料頁面,再從資料頁面獲取資訊!雖然程式碼看起來很複雜,其實這部份是基本的登入驗證流程,我測試的網頁在登入驗證部分有相關的網址揭露,所以讓我登入時比較容易一些,而最難的是設定cookie那,其實我不確定我抓的cookie是否都能套用,但後來用網頁解析一步一步跑其實就可以查出些蛛絲馬跡!相信大家都能好好去練習,爬自己想要的網站!

下週主題「freestyle」!

Imgur

0%