最近做了幾個寫爬蟲的小專案(從頁面端到APP端的都有),在網上搜尋了一番好用的爬蟲工具,做了個工具集整理:
Puppeteer
簡介
Puppeteer
是一個Node庫,它提供了一個高階 API 來通過 DevTools協議控制Chromium或Chrome。簡單點說,就是使用Node命令控制一個無需渲染至使用者介面的瀏覽器。
與使用PhantomJS
搭配Python
進行爬蟲抓取類似,其原理也是去完全地模擬一個瀏覽器進行頁面的渲染,從而抓取其中某些特定的內容。
特性
Puppeteer
可以完整地模擬一個瀏覽器的行為,並且可以進行截圖、攔截瀏覽器請求、獲取Cookie、通過Node注入JS程式碼等操作,使用Chrome瀏覽器開發者工具能做到的,Puppeteer也能做到,可以說是騷得一匹(誤
使用起來也十分的簡單,以下是官方的例子:
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上放了一份自己寫的使用Puppeteer獲取微博cookie的程式碼,歡迎檢視:
github.com/SP-Lyu/pupp…
由於Puppeteer
基於Chromium,每次都需要載入頁面再進行頁面分析,效能十分有限,下面提到的cheerio
則可以從另一層面解決這個問題。
文件
cheerio
cheerio
是一個輕型靈活,類jQuery的對HTML元素分析操作的工具。在進行一些server端渲染的頁面以及一些簡單的小頁面的爬取時,cheerio
十分好用且高效。
特性
cheerio
包括了jQuery的核心子集,意味著可以直接使用jQuery的API進行元素的操控,官方的例子:
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>
複製程式碼
自己寫的獲取某個網站的所有a連結:
const cheerio = require('cheerio');
const get = function(){/*HTTP get請求...*/}
(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);
});
})();
複製程式碼
文件
Auto.js
國人開發的,使用js編寫程式碼操作Android裝置的自動化工具,對於爬取某些加固措施較好的APP來說十分有用,而且有非常完善的文件以及社群,十分良心。
使用Auto.js進行裝置自動化操作,再通過代理進行請求資料的獲取,能繞開加固中難以破解的加密串。
特性
作為爬蟲工具,好處有:
- 採用JavaScript作為指令碼語言開發,JS開發者0成本接入;
- 相容性良好,大多數任務不需要root許可權;
- 自帶介面分析工具,方便定位需要操作的元素。
從Auto.js載入某個APP,並點選進入某個頻道的例子:
// 宣告環境
auto();
// 裝置常亮
device.keepScreenDim();
// 調起APP
launchApp('頭條');
sleep(10000);
// 找到某個頻道,並點選進入
var rect = text('視訊').findOnce().bounds();
var x = rect.centerX();
var y = rect.centerY();
click(x, y);
// 點選進入詳情,使用代理抓取並處理請求...
...
複製程式碼