iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 3
1
AI & Data

Puppeteer 簡單快速建立自己的 Nodejs 爬蟲系列 第 3

Day 3 爬爬爬 鐵人幫

  • 分享至 

  • xImage
  •  

再上一篇有列出我們的操作順序

  1. 找到要爬目標網址,這裡也就是 https://ithelp.ithome.com.tw/ironman 鐵人幫的網址
  2. 找到想要爬的資料位置,最新文章的'標題'和'瀏覽數'
  3. 找到後爬下並儲存在本機端

確認自己的目標後我們就開始實作吧

我們先開啟終端機(Terminal)並到我們專案目錄下

cd test-project

先安裝cheerio套件
如果寫過jqery那對cheerio的應用可以很快上手,看到$字號就知道了
如果沒寫過沒關係,我再這裡的應用不會很難

npm install cheerio

接著新增一個檔案app.js

touch app.js

打開你的編輯器在打開app.js

下面的操作都可以在套件的API文件中找到

先把目標指向網頁

const puppeteer = require('puppeteer');
//引入cheerio
const cheerio = require('cheerio');
(async () => {
  const browser = await puppeteer.launch({
      headless : true
  });
  const page = await browser.newPage();
  await page.goto('https://ithelp.ithome.com.tw/ironman');
  
  //先等待網頁載入到底下的section的html標籤,不然有時候執行太快抓不到網頁
   await page.waitForSelector('section')
  
  //把網頁的body抓出來
  let body = await page.content()
  
  //接著我們把他丟給cheerio去處理
  let $ = await cheerio.load(body)
  
  // await browser.close()
})();

接著我們開始搜尋要抓取的元素
我們開啟鐵人幫上面的網址
並再瀏覽器上使用 右鍵->檢查 開啟檢查工具或ctrl+shift+i
接著點選工具左上角的選擇元素工具

指向我們要選取元素,也就是標題

並把他的位置紀錄下來

加入己行到檔案下面
前面的html和body就不需要了因為是基本元素

const puppeteer = require('puppeteer');
const cheerio = require('cheerio');
(async () => {
    const browser = await puppeteer.launch({
        headless: true
        //false 會讓瀏覽器實際開啟
        //true 會再後台開啟
    });
    const page = await browser.newPage();
    await page.goto('https://ithelp.ithome.com.tw/ironman');
    await page.waitForSelector('section')
    let body = await page.content()
    let $ = await cheerio.load(body)
    
    //我們把cheerio找到的資料轉成文字並存進data這個變數
    let data = await $('div #ir-list div div ul.list-unstyled.ir-lists li.ir-list h3.ir-list__title a').text()
    //並再終端機print出來
    console.log(data)

    await browser.close()
})();

存檔接著再終端機下

node app.js

就可以看到結果

03 從線性迴歸到感知器[Day 2] Swift 與 OC 的變數差異[Day 3] Machine learning介紹各種簡介Day3 - 一周目- 建立 第一個Node.js 專案Moodle-如何錄製影片 (Day3)使用 Docker - 基本操作DAY2 進擊の JavaScript瓶子裡裝甚麼藥,使用Flask輕輕鬆鬆打造一個RESTful API-DAY02Day3 : 建置Project

這邊看到很多筆
因為他把抓到相同的html的標籤下的文字都抓出來
所以會看到這一頁所有的標題

今天就先這樣
明天會教大家把觀看數也抓下來
並把每比資料分割下來


上一篇
Day 2 範例程式解釋
下一篇
Day 4 擷取 分類 儲存
系列文
Puppeteer 簡單快速建立自己的 Nodejs 爬蟲25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Sonic
iT邦新手 5 級 ‧ 2022-07-11 16:03:57

請問是否因為 2018年的 Puppeteer 沒有 query selector 功能,所以才配合 cheerio 使用?

我要留言

立即登入留言