最近做了幾個(gè)寫(xiě)爬蟲(chóng)的小項(xiàng)目(從頁(yè)面端到APP端的都有),在網(wǎng)上搜尋了一番好用的爬蟲(chóng)工具,做了個(gè)工具集整理:
Puppeteer
簡(jiǎn)介
Puppeteer 是一個(gè)Node庫(kù),它提供了一個(gè)高級(jí) API 來(lái)通過(guò) DevTools協(xié)議控制Chromium或Chrome。簡(jiǎn)單點(diǎn)說(shuō),就是使用Node命令控制一個(gè)無(wú)需渲染至用戶界面的瀏覽器。
與使用 PhantomJS 搭配 Python 進(jìn)行爬蟲(chóng)抓取類似,其原理也是去完全地模擬一個(gè)瀏覽器進(jìn)行頁(yè)面的渲染,從而抓取其中某些特定的內(nèi)容。
特性
Puppeteer 可以完整地模擬一個(gè)瀏覽器的行為,并且可以進(jìn)行截圖、攔截瀏覽器請(qǐng)求、獲取Cookie、通過(guò)Node注入JS代碼等操作,使用Chrome瀏覽器開(kāi)發(fā)者工具能做到的,Puppeteer也能做到。
使用起來(lái)也十分的簡(jiǎn)單,以下是官方的例子:
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://example.com'); await page.screenshot({path: 'example.png'}); await browser.close(); })();
在GitHub上放了一份自己寫(xiě)的使用Puppeteer獲取微博cookie的代碼,歡迎查看:
https://github.com/SP-Lyu/puppeteer_weibo_cookie/blob/master/index.js
由于 Puppeteer 基于Chromium,每次都需要載入頁(yè)面再進(jìn)行頁(yè)面分析,性能十分有限,下面提到的 cheerio 則可以從另一層面解決這個(gè)問(wèn)題。
文檔
GitHub
中文API地址
cheerio
cheerio 是一個(gè)輕型靈活,類jQuery的對(duì)HTML元素分析操作的工具。在進(jìn)行一些server端渲染的頁(yè)面以及一些簡(jiǎn)單的小頁(yè)面的爬取時(shí), cheerio 十分好用且高效。
特性
cheerio 包括了jQuery的核心子集,意味著可以直接使用jQuery的API進(jìn)行元素的操控,官方的例子:
const cheerio = require('cheerio') const $ = cheerio.load('<h2 class="title">Hello world</h2>') $('h2.title').text('Hello there!') $('h2').addClass('welcome') $.html() //=> <h2 class="title welcome">Hello there!</h2>
自己寫(xiě)的獲取某個(gè)網(wǎng)站的所有a鏈接:
const cheerio = require('cheerio'); const get = function(){/*HTTP get請(qǐng)求...*/} (async ()=>{ const html = await get(`http://example.com`); const $ = cheerio.load(html); const $dom_arr = $('a'); $dom_arr.each((index, elem)=>{ const url = $(elem).attr('href') || ''; console.log(url); }); })();
文檔
GitHub
Auto.js
國(guó)人開(kāi)發(fā)的,使用js編寫(xiě)代碼操作Android設(shè)備的自動(dòng)化工具,對(duì)于爬取某些加固措施較好的APP來(lái)說(shuō)十分有用,而且有非常完善的文檔以及社區(qū),十分良心。
使用Auto.js進(jìn)行設(shè)備自動(dòng)化操作,再通過(guò)代理進(jìn)行請(qǐng)求數(shù)據(jù)的獲取,能繞開(kāi)加固中難以破解的加密串。
特性
作為爬蟲(chóng)工具,好處有:
從Auto.js載入某個(gè)APP,并點(diǎn)擊進(jìn)入某個(gè)頻道的例子:
// 聲明環(huán)境 auto(); // 設(shè)備常亮 device.keepScreenDim(); // 調(diào)起APP launchApp('頭條'); sleep(10000); // 找到某個(gè)頻道,并點(diǎn)擊進(jìn)入 var rect = text('視頻').findOnce().bounds(); var x = rect.centerX(); var y = rect.centerY(); click(x, y); // 點(diǎn)擊進(jìn)入詳情,使用代理抓取并處理請(qǐng)求... ...
文檔
GitHub
中文文檔
社區(qū)
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com