Skip to content

Commit

Permalink
因應 FB 改版,微調爬蟲程式邏輯,解決「追蹤人數」精確度判定問題
Browse files Browse the repository at this point in the history
  • Loading branch information
dean_lin committed Nov 15, 2021
1 parent 0bc3feb commit 6de0cc0
Show file tree
Hide file tree
Showing 21 changed files with 124 additions and 1 deletion.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,7 @@
[Ch33. 整合 LINE 的爬蟲通知,專案大功告成!](/ch33)

> _免責聲明:書中教學與範例程式僅抓取公開數據作爲研究,任何組織和個人不得以此技術盜取他人智慧財產、造成網站損害,否則一切后果由該組織或個人承擔。作者不承擔任何法律及連帶責任!_
> ### 更新紀錄
>
> **2021.11.15**:因應 FB 改版,微調爬蟲程式邏輯,解決「追蹤人數」精確度判定問題,相關 commit 請看:連結
7 changes: 6 additions & 1 deletion ch12/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,9 @@ async function loginFacebookGetTrace () {
break;
}
}

if (fb_trace === null) {//如果沒有抓到數字,就走查詢頁面
is_accurate = false;
}
// 如果判斷追蹤人數不夠精準就需要改用搜尋的方式
if (!is_accurate) {
let fan_page_name = "寶寶不說";
Expand All @@ -106,6 +108,9 @@ async function loginFacebookGetTrace () {
const keyword = fb_text.indexOf("位追蹤者");
fb_text = fb_text.substring(0, keyword);
const search_trace = fb_text.replace(/\D/g, ''); // 只取數字
if (fb_trace === null) {//先給預設值
fb_trace = search_trace;
}
if (((search_trace - fb_trace) / fb_trace) < 0.2) { // 追蹤人數超過一萬且誤差值小於20%基本就是匹配的
fb_trace = search_trace;
}
Expand Down
6 changes: 6 additions & 0 deletions ch14/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,9 @@ async function loginFacebookGetTrace (driver) {
break;
}
}
if (fb_trace === null) {//如果沒有抓到數字,就走查詢頁面
is_accurate = false;
}

// 如果判斷追蹤人數不夠精準就需要改用搜尋的方式
if (!is_accurate) {
Expand All @@ -130,6 +133,9 @@ async function loginFacebookGetTrace (driver) {
const keyword = fb_text.indexOf("位追蹤者");
fb_text = fb_text.substring(0, keyword);
const search_trace = fb_text.replace(/\D/g, '');//只取數字
if (fb_trace === null) {//先給預設值
fb_trace = search_trace;
}
if (((search_trace - fb_trace) / fb_trace) < 0.2) {//追蹤人數超過一萬且誤差值小於20%基本就是匹配的
fb_trace = search_trace;
}
Expand Down
6 changes: 6 additions & 0 deletions ch15/tools/crawlerFB.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ async function getTrace (driver, fan_page_name) {
break;
}
}
if (fb_trace === null) {//如果沒有抓到數字,就走查詢頁面
is_accurate = false;
}
// 如果判斷追蹤人數不夠精準就需要改用搜尋的方式
if (!is_accurate) {
fb_trace = await getTraceFromSearch(driver, fan_page_name, fb_trace);
Expand All @@ -77,6 +80,9 @@ async function getTraceFromSearch (driver, fan_page_name, fb_trace) {
const keyword = fb_text.indexOf("位追蹤者");
fb_text = fb_text.substring(0, keyword);
const search_trace = fb_text.replace(/\D/g, '');//只取數字
if (fb_trace === null) {//先給預設值
fb_trace = search_trace;
}
if (((search_trace - fb_trace) / fb_trace) < 0.2) {//追蹤人數超過一萬且誤差值小於20%基本就是匹配的
fb_trace = search_trace;
}
Expand Down
6 changes: 6 additions & 0 deletions ch16/tools/crawlerFB.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@ async function getTrace (driver, fan_page_name) {
break;
}
}
if (fb_trace === null) {//如果沒有抓到數字,就走查詢頁面
is_accurate = false;
}
// 如果判斷追蹤人數不夠精準就需要改用搜尋的方式
if (!is_accurate) {
fb_trace = await getTraceFromSearch(driver, fan_page_name, fb_trace);
Expand All @@ -103,6 +106,9 @@ async function getTraceFromSearch (driver, fan_page_name, fb_trace) {
const keyword = fb_text.indexOf("位追蹤者");
fb_text = fb_text.substring(0, keyword);
const search_trace = fb_text.replace(/\D/g, '');//只取數字
if (fb_trace === null) {//先給預設值
fb_trace = search_trace;
}
if (((search_trace - fb_trace) / fb_trace) < 0.2) {//追蹤人數超過一萬且誤差值小於20%基本就是匹配的
fb_trace = search_trace;
}
Expand Down
6 changes: 6 additions & 0 deletions ch17/tools/crawlerFB.js
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,9 @@ async function getTrace (driver, fan_page_name) {
break;
}
}
if (fb_trace === null) {//如果沒有抓到數字,就走查詢頁面
is_accurate = false;
}
// 如果判斷追蹤人數不夠精準就需要改用搜尋的方式
if (!is_accurate) {
fb_trace = await getTraceFromSearch(driver, fan_page_name, fb_trace);
Expand All @@ -112,6 +115,9 @@ async function getTraceFromSearch (driver, fan_page_name, fb_trace) {
const keyword = fb_text.indexOf("位追蹤者");
fb_text = fb_text.substring(0, keyword);
const search_trace = fb_text.replace(/\D/g, '');//只取數字
if (fb_trace === null) {//先給預設值
fb_trace = search_trace;
}
if (((search_trace - fb_trace) / fb_trace) < 0.2) {//追蹤人數超過一萬且誤差值小於20%基本就是匹配的
fb_trace = search_trace;
}
Expand Down
6 changes: 6 additions & 0 deletions ch18/tools/crawlerFB.js
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ async function getTrace (driver, fan_page_name) {
break;
}
}
if (fb_trace === null) {//如果沒有抓到數字,就走查詢頁面
is_accurate = false;
}
// 如果判斷追蹤人數不夠精準就需要改用搜尋的方式
if (!is_accurate) {
fb_trace = await getTraceFromSearch(driver, fan_page_name, fb_trace);
Expand All @@ -116,6 +119,9 @@ async function getTraceFromSearch (driver, fan_page_name, fb_trace) {
const keyword = fb_text.indexOf("位追蹤者");
fb_text = fb_text.substring(0, keyword);
const search_trace = fb_text.replace(/\D/g, '');//只取數字
if (fb_trace === null) {//先給預設值
fb_trace = search_trace;
}
if (((search_trace - fb_trace) / fb_trace) < 0.2) {//追蹤人數超過一萬且誤差值小於20%基本就是匹配的
fb_trace = search_trace;
}
Expand Down
6 changes: 6 additions & 0 deletions ch19/tools/crawlerFB.js
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ async function getTrace (driver, fan_page_name) {
break;
}
}
if (fb_trace === null) {//如果沒有抓到數字,就走查詢頁面
is_accurate = false;
}
// 如果判斷追蹤人數不夠精準就需要改用搜尋的方式
if (!is_accurate) {
fb_trace = await getTraceFromSearch(driver, fan_page_name, fb_trace);
Expand All @@ -116,6 +119,9 @@ async function getTraceFromSearch (driver, fan_page_name, fb_trace) {
const keyword = fb_text.indexOf("位追蹤者");
fb_text = fb_text.substring(0, keyword);
const search_trace = fb_text.replace(/\D/g, '');//只取數字
if (fb_trace === null) {//先給預設值
fb_trace = search_trace;
}
if (((search_trace - fb_trace) / fb_trace) < 0.2) {//追蹤人數超過一萬且誤差值小於20%基本就是匹配的
fb_trace = search_trace;
}
Expand Down
6 changes: 6 additions & 0 deletions ch21/tools/crawlerFB.js
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ async function getTrace (driver, fan_page_name) {
break;
}
}
if (fb_trace === null) {//如果沒有抓到數字,就走查詢頁面
is_accurate = false;
}
// 如果判斷追蹤人數不夠精準就需要改用搜尋的方式
if (!is_accurate) {
fb_trace = await getTraceFromSearch(driver, fan_page_name, fb_trace);
Expand All @@ -116,6 +119,9 @@ async function getTraceFromSearch (driver, fan_page_name, fb_trace) {
const keyword = fb_text.indexOf("位追蹤者");
fb_text = fb_text.substring(0, keyword);
const search_trace = fb_text.replace(/\D/g, '');//只取數字
if (fb_trace === null) {//先給預設值
fb_trace = search_trace;
}
if (((search_trace - fb_trace) / fb_trace) < 0.2) {//追蹤人數超過一萬且誤差值小於20%基本就是匹配的
fb_trace = search_trace;
}
Expand Down
6 changes: 6 additions & 0 deletions ch22/tools/crawlerFB.js
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ async function getTrace (driver, fan_page_name) {
break;
}
}
if (fb_trace === null) {//如果沒有抓到數字,就走查詢頁面
is_accurate = false;
}
// 如果判斷追蹤人數不夠精準就需要改用搜尋的方式
if (!is_accurate) {
fb_trace = await getTraceFromSearch(driver, fan_page_name, fb_trace);
Expand All @@ -116,6 +119,9 @@ async function getTraceFromSearch (driver, fan_page_name, fb_trace) {
const keyword = fb_text.indexOf("位追蹤者");
fb_text = fb_text.substring(0, keyword);
const search_trace = fb_text.replace(/\D/g, '');//只取數字
if (fb_trace === null) {//先給預設值
fb_trace = search_trace;
}
if (((search_trace - fb_trace) / fb_trace) < 0.2) {//追蹤人數超過一萬且誤差值小於20%基本就是匹配的
fb_trace = search_trace;
}
Expand Down
6 changes: 6 additions & 0 deletions ch23/tools/crawlerFB.js
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ async function getTrace (driver, fan_page_name) {
break;
}
}
if (fb_trace === null) {//如果沒有抓到數字,就走查詢頁面
is_accurate = false;
}
// 如果判斷追蹤人數不夠精準就需要改用搜尋的方式
if (!is_accurate) {
fb_trace = await getTraceFromSearch(driver, fan_page_name, fb_trace);
Expand All @@ -116,6 +119,9 @@ async function getTraceFromSearch (driver, fan_page_name, fb_trace) {
const keyword = fb_text.indexOf("位追蹤者");
fb_text = fb_text.substring(0, keyword);
const search_trace = fb_text.replace(/\D/g, '');//只取數字
if (fb_trace === null) {//先給預設值
fb_trace = search_trace;
}
if (((search_trace - fb_trace) / fb_trace) < 0.2) {//追蹤人數超過一萬且誤差值小於20%基本就是匹配的
fb_trace = search_trace;
}
Expand Down
6 changes: 6 additions & 0 deletions ch24/tools/crawlerFB.js
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ async function getTrace (driver, fan_page_name) {
break;
}
}
if (fb_trace === null) {//如果沒有抓到數字,就走查詢頁面
is_accurate = false;
}
// 如果判斷追蹤人數不夠精準就需要改用搜尋的方式
if (!is_accurate) {
fb_trace = await getTraceFromSearch(driver, fan_page_name, fb_trace);
Expand All @@ -130,6 +133,9 @@ async function getTraceFromSearch (driver, fan_page_name, fb_trace) {
const keyword = fb_text.indexOf("位追蹤者");
fb_text = fb_text.substring(0, keyword);
const search_trace = fb_text.replace(/\D/g, '');//只取數字
if (fb_trace === null) {//先給預設值
fb_trace = search_trace;
}
if (((search_trace - fb_trace) / fb_trace) < 0.2) {//追蹤人數超過一萬且誤差值小於20%基本就是匹配的
fb_trace = search_trace;
}
Expand Down
6 changes: 6 additions & 0 deletions ch25/tools/crawlerFB.js
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ async function getTrace (driver, fan_page_name) {
break;
}
}
if (fb_trace === null) {//如果沒有抓到數字,就走查詢頁面
is_accurate = false;
}
// 如果判斷追蹤人數不夠精準就需要改用搜尋的方式
if (!is_accurate) {
fb_trace = await getTraceFromSearch(driver, fan_page_name, fb_trace);
Expand All @@ -130,6 +133,9 @@ async function getTraceFromSearch (driver, fan_page_name, fb_trace) {
const keyword = fb_text.indexOf("位追蹤者");
fb_text = fb_text.substring(0, keyword);
const search_trace = fb_text.replace(/\D/g, '');//只取數字
if (fb_trace === null) {//先給預設值
fb_trace = search_trace;
}
if (((search_trace - fb_trace) / fb_trace) < 0.2) {//追蹤人數超過一萬且誤差值小於20%基本就是匹配的
fb_trace = search_trace;
}
Expand Down
6 changes: 6 additions & 0 deletions ch26/tools/crawlerFB.js
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ async function getTrace (driver, fan_page_name) {
break;
}
}
if (fb_trace === null) {//如果沒有抓到數字,就走查詢頁面
is_accurate = false;
}
// 如果判斷追蹤人數不夠精準就需要改用搜尋的方式
if (!is_accurate) {
fb_trace = await getTraceFromSearch(driver, fan_page_name, fb_trace);
Expand All @@ -130,6 +133,9 @@ async function getTraceFromSearch (driver, fan_page_name, fb_trace) {
const keyword = fb_text.indexOf("位追蹤者");
fb_text = fb_text.substring(0, keyword);
const search_trace = fb_text.replace(/\D/g, '');//只取數字
if (fb_trace === null) {//先給預設值
fb_trace = search_trace;
}
if (((search_trace - fb_trace) / fb_trace) < 0.2) {//追蹤人數超過一萬且誤差值小於20%基本就是匹配的
fb_trace = search_trace;
}
Expand Down
6 changes: 6 additions & 0 deletions ch27/tools/crawlerFB.js
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ async function getTrace (driver, fan_page_name) {
break;
}
}
if (fb_trace === null) {//如果沒有抓到數字,就走查詢頁面
is_accurate = false;
}
// 如果判斷追蹤人數不夠精準就需要改用搜尋的方式
if (!is_accurate) {
fb_trace = await getTraceFromSearch(driver, fan_page_name, fb_trace);
Expand All @@ -130,6 +133,9 @@ async function getTraceFromSearch (driver, fan_page_name, fb_trace) {
const keyword = fb_text.indexOf("位追蹤者");
fb_text = fb_text.substring(0, keyword);
const search_trace = fb_text.replace(/\D/g, '');//只取數字
if (fb_trace === null) {//先給預設值
fb_trace = search_trace;
}
if (((search_trace - fb_trace) / fb_trace) < 0.2) {//追蹤人數超過一萬且誤差值小於20%基本就是匹配的
fb_trace = search_trace;
}
Expand Down
6 changes: 6 additions & 0 deletions ch28/tools/crawlerFB.js
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ async function getTrace (driver, fan_page_name) {
break;
}
}
if (fb_trace === null) {//如果沒有抓到數字,就走查詢頁面
is_accurate = false;
}
// 如果判斷追蹤人數不夠精準就需要改用搜尋的方式
if (!is_accurate) {
fb_trace = await getTraceFromSearch(driver, fan_page_name, fb_trace);
Expand All @@ -130,6 +133,9 @@ async function getTraceFromSearch (driver, fan_page_name, fb_trace) {
const keyword = fb_text.indexOf("位追蹤者");
fb_text = fb_text.substring(0, keyword);
const search_trace = fb_text.replace(/\D/g, '');//只取數字
if (fb_trace === null) {//先給預設值
fb_trace = search_trace;
}
if (((search_trace - fb_trace) / fb_trace) < 0.2) {//追蹤人數超過一萬且誤差值小於20%基本就是匹配的
fb_trace = search_trace;
}
Expand Down
6 changes: 6 additions & 0 deletions ch29/tools/crawlerFB.js
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ async function getTrace (driver, fan_page_name) {
break;
}
}
if (fb_trace === null) {//如果沒有抓到數字,就走查詢頁面
is_accurate = false;
}
// 如果判斷追蹤人數不夠精準就需要改用搜尋的方式
if (!is_accurate) {
fb_trace = await getTraceFromSearch(driver, fan_page_name, fb_trace);
Expand All @@ -130,6 +133,9 @@ async function getTraceFromSearch (driver, fan_page_name, fb_trace) {
const keyword = fb_text.indexOf("位追蹤者");
fb_text = fb_text.substring(0, keyword);
const search_trace = fb_text.replace(/\D/g, '');//只取數字
if (fb_trace === null) {//先給預設值
fb_trace = search_trace;
}
if (((search_trace - fb_trace) / fb_trace) < 0.2) {//追蹤人數超過一萬且誤差值小於20%基本就是匹配的
fb_trace = search_trace;
}
Expand Down
6 changes: 6 additions & 0 deletions ch30/tools/crawlerFB.js
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ async function getTrace (driver, fan_page_name) {
break;
}
}
if (fb_trace === null) {//如果沒有抓到數字,就走查詢頁面
is_accurate = false;
}
// 如果判斷追蹤人數不夠精準就需要改用搜尋的方式
if (!is_accurate) {
fb_trace = await getTraceFromSearch(driver, fan_page_name, fb_trace);
Expand All @@ -130,6 +133,9 @@ async function getTraceFromSearch (driver, fan_page_name, fb_trace) {
const keyword = fb_text.indexOf("位追蹤者");
fb_text = fb_text.substring(0, keyword);
const search_trace = fb_text.replace(/\D/g, '');//只取數字
if (fb_trace === null) {//先給預設值
fb_trace = search_trace;
}
if (((search_trace - fb_trace) / fb_trace) < 0.2) {//追蹤人數超過一萬且誤差值小於20%基本就是匹配的
fb_trace = search_trace;
}
Expand Down
6 changes: 6 additions & 0 deletions ch31/tools/crawlerFB.js
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ async function getTrace (driver, fan_page_name) {
break;
}
}
if (fb_trace === null) {//如果沒有抓到數字,就走查詢頁面
is_accurate = false;
}
// 如果判斷追蹤人數不夠精準就需要改用搜尋的方式
if (!is_accurate) {
fb_trace = await getTraceFromSearch(driver, fan_page_name, fb_trace);
Expand All @@ -130,6 +133,9 @@ async function getTraceFromSearch (driver, fan_page_name, fb_trace) {
const keyword = fb_text.indexOf("位追蹤者");
fb_text = fb_text.substring(0, keyword);
const search_trace = fb_text.replace(/\D/g, '');//只取數字
if (fb_trace === null) {//先給預設值
fb_trace = search_trace;
}
if (((search_trace - fb_trace) / fb_trace) < 0.2) {//追蹤人數超過一萬且誤差值小於20%基本就是匹配的
fb_trace = search_trace;
}
Expand Down
6 changes: 6 additions & 0 deletions ch32/tools/crawlerFB.js
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ async function getTrace (driver, fan_page_name) {
break;
}
}
if (fb_trace === null) {//如果沒有抓到數字,就走查詢頁面
is_accurate = false;
}
// 如果判斷追蹤人數不夠精準就需要改用搜尋的方式
if (!is_accurate) {
fb_trace = await getTraceFromSearch(driver, fan_page_name, fb_trace);
Expand All @@ -130,6 +133,9 @@ async function getTraceFromSearch (driver, fan_page_name, fb_trace) {
const keyword = fb_text.indexOf("位追蹤者");
fb_text = fb_text.substring(0, keyword);
const search_trace = fb_text.replace(/\D/g, '');//只取數字
if (fb_trace === null) {//先給預設值
fb_trace = search_trace;
}
if (((search_trace - fb_trace) / fb_trace) < 0.2) {//追蹤人數超過一萬且誤差值小於20%基本就是匹配的
fb_trace = search_trace;
}
Expand Down
Loading

0 comments on commit 6de0cc0

Please sign in to comment.