前端開發(fā)爬蟲首選puppeteer

很多前端同學可能對于爬蟲不是很感冒,覺得爬蟲需要用偏后端的語言,諸如 python 、php 等。當然這是在 nodejs 前了,nodejs 的出現(xiàn),使得 Javascript 也可以用來寫爬蟲了。但這是大數(shù)據(jù)時代,數(shù)據(jù)的需求是不分前端還是后端的,既然由于 nodejs 強大的異步特性,讓我們可以輕松以異步高并發(fā)去爬取網(wǎng)站。

這里會有一個問題嗎,那就是前端程序員如果要開發(fā)爬蟲是使用python還是使用puppeteer呢?如果想快速開發(fā)爬蟲,還是驅(qū)動瀏覽器的方式比較好,我推薦用puppeteer,純js環(huán)境,上手快,puppeteer直接驅(qū)動無頭瀏覽器速度并不算慢。但是現(xiàn)在目標網(wǎng)站爬蟲策略多種多樣,即使是使用最簡單的方式也要學習反爬策略的應(yīng)對。如果遇到驗證碼識別等需要深度學習的,可以用python寫這部分,然后nodejs和python進程間通信。
這里我們可以使用puppeteer簡單的實現(xiàn)下爬蟲,就以獲取微博熱搜為例子進行實踐。
// 引入process和puppeteer模塊
const process = require("process");
const puppeteer = require("puppeteer");

// 定義代理地址、延時時間和延時函數(shù)
const PROXY = "http://www.16yun.cn:80"; // 代理服務(wù)器(產(chǎn)品 www.16yun.cn)可以修改這個代理地址
const SLEEP = 5000; // 你可以修改這個延時時間(毫秒)
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

// 定義一個異步函數(shù)view,接受一個URL和一個代理地址作為參數(shù)
async function view(url, proxy) {
// 在view函數(shù)中,使用puppeteer.launch方法啟動一個瀏覽器實例,并設(shè)置一些參數(shù),如headless、ignoreHTTPSErrors、defaultViewport和args
const browser = await puppeteer.launch({
headless: true, // 設(shè)置為無頭模式(不顯示瀏覽器窗口)
ignoreHTTPSErrors: true, // 忽略HTTPS錯誤
defaultViewport: { width: 1280, height: 800 }, // 設(shè)置默認視口大小
args: [--proxy-server=${proxy}], // 設(shè)置代理服務(wù)器地址
});

// 使用browser.newPage方法創(chuàng)建一個新的頁面實例,并設(shè)置視口大小
const page = await browser.newPage();
await page.setViewport({ width: 1280, height: 800 });

// 使用page.on方法監(jiān)聽request事件,如果請求的資源類型是media,并且請求的URL以https://video.twimg.com/開頭,則打印出請求的URL
page.on("request", (request) => {
if (
request.resourceType() === "media" &&
request.url().startsWith("https://weibo.com//")
) {
console.log(request.url());
}
});

// 使用page.goto方法訪問傳入的URL
await page.goto(url);

// 使用page.click方法點擊頁面上選擇器為.r-1ndi9ce > div:nth-child(1) > div:nth-child(1) > span:nth-child(1) > span:nth-child(1) 的元素
await page.click(
".r-1ndi9ce > div:nth-child(1) > div:nth-child(1) > span:nth-child(1) > span:nth-child(1)"
);

// 使用sleep函數(shù)等待一段時間(SLEEP)
await sleep(SLEEP);

// 使用page.screenshot方法截取頁面圖片并保存為debug.png文件
await page.screenshot({ path: "debug.png" });

// 使用browser.close方法關(guān)閉瀏覽器實例
await browser.close();
}

// 最后,在主程序中,獲取命令行參數(shù)中的第一個參數(shù)作為URL,并調(diào)用view函數(shù)。
const url = process.argv[2]; // 獲取命令行參數(shù)中的第一個參數(shù)作為URL

if (url) {
view(url, PROXY);
} else {
console.log("請輸入一個有效的URL");
}
puppeteer相當于python selenium 控制無頭Chrome,作為前端程序員,那python雖然語法容易但畢竟學的也比較多,所以建議可以試試puppeteer。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容