puppeteer的簡單使用_爬取頁面信息

使用chrome無頭瀏覽器作爬蟲 - 有什麼拿什麼

puppeteer

它是Node的一個用來操縱瀏覽器的API的庫,對的你沒看錯,就是操做瀏覽器的,細思極恐啊
簡單說就是瀏覽器有的它都有了(固然有些功能也正在開發中)
能夠註冊,模擬登錄,設置cookie
操做dom事件,執行js腳本
Chrome團隊對其維護,厲害了吧
文檔地址: https://github.com/GoogleChro...

安裝

首先Nodejs 的版本不能低於 v7.6.0, 由於全都是 async, await 異步操做
npm install puppeteer -S
出現安裝問題的小夥伴能夠試一試npm的內置配置文件,當前目錄下新建一個.npmrc結尾的文件,內容以下
registry=https://registry.npm.taobao.org
chromedriver_cdnurl=http://npm.taobao.org/mirrors/chromedriver
phantomjs_cdnurl=https://npm.taobao.org/dist/phantomjs
electron_mirror=https://npm.taobao.org/mirrors/electron/
sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
puppeteer_download_host=https://cdn.npm.taobao.org/dist

官網的demo

const puppeteer = require('puppeteer');
(async () => {
  // 建立一個瀏覽器實例 Browser 對象
  const browser = await puppeteer.launch();
  // 經過瀏覽器實例 Browser 對象建立頁面 Page 對象
  const page = await browser.newPage();
  // 經過url參數打開指定的頁面
  await page.goto('https://example.com');
  // 對頁面進行截圖
  await page.screenshot({path: 'example.png'});
  // 關閉瀏覽器
  await browser.close();
})();

先來個最最基本的抓取

實戰_抓取2345小說站任意書籍的章節列表

圖片描述

兩個箭頭標記的css

  1. 觀察url,.html以前的數字就是抓取書籍的bookId
  2. 章節列表所在容器標籤

上乾貨,都在註釋裏了

圖片描述
clipboard.png

抓取的結果

clipboard.png

完整代碼
const puppeteer = require('puppeteer');
(async ()=>{
    try{
        // 建立一個瀏覽器實例 Browser 對象
        let browser = await puppeteer.launch({
            // 是否不顯示瀏覽器, 爲true則不顯示
            'headless': false,
        });
        // 經過瀏覽器實例 Browser 對象建立頁面 Page 對象
        let page = await browser.newPage();
        // 設置瀏覽器信息
        const UA = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/63.0.3239.84 Chrome/63.0.3239.84 Safari/537.36";
        await Promise.all([
            page.setUserAgent(UA),
            // 容許運行js
            page.setJavaScriptEnabled(true),
            // 設置頁面視口的大小
            page.setViewport({width: 1100, height: 1080}),
        ]);
        // 地址
        let chapter_list_url = `http://book.km.com/chapterlist/396353.html`
        // 打開章節列表
        await page.goto(chapter_list_url);
        // 使用css選擇器的方式
        let content= await page.$eval('#xtopjsinfo > div.wrapper > div.container > div.catalog > div.catalog_bd', el => el.innerText);
        console.log(content);
    }catch(err){
        console.log(err)
    }
})()
相關文章
相關標籤/搜索