教你用puppeteer爬取美女圖片上傳到cdn

puppetter 是谷歌出的一個(gè)無(wú)頭瀏覽器,可以用來(lái)寫e2e單元測(cè)試,本文用來(lái)爬取美女圖片。哈哈,其實(shí)爬取簡(jiǎn)單,上傳cdn吃了好大的苦,阿里的oss上傳小視頻(豆瓣的預(yù)告片)一直給報(bào)錯(cuò)(用put,buffer,stream都試過(guò),最后才發(fā)現(xiàn)是oss的超時(shí)時(shí)間是nodejs控制的,我一直以為是oss那邊控制了超時(shí)時(shí)間6000ms)

獻(xiàn)上我爬取的最好的一張美女圖片
beauty gril

async function getWelfareImage (url) {

  // 返回解析為Promise的瀏覽器
  const browser = await puppeteer.launch()

  // 返回新的頁(yè)面對(duì)象
  const page = await browser.newPage()

  // 頁(yè)面對(duì)象訪問對(duì)應(yīng)的url地址
  await page.goto(url, {
      waitUntil: 'networkidle2'
  })

  // 等待3000ms,等待瀏覽器的加載
  await sleep(1000)

  // 可以在page.evaluate的回調(diào)函數(shù)中訪問瀏覽器對(duì)象,可以進(jìn)行DOM操作
  const urls = await page.evaluate(() => {
      let ol = document.getElementsByClassName('commentlist')[0]
      let imgs = ol.getElementsByTagName('img')
      let url = []
      for (let i = 0; i < imgs.length; i++) {
          url.push(imgs[i].getAttribute("src"))
      }
      // 返回所有美女圖的url地址數(shù)組
      return url
  })
  const store = oss(config.ossconfig)
  for (let i = 0; i < urls.length; i++) {
    // request-promise,返回一個(gè)buffer對(duì)象
    let fetchResult = await rp({url:urls[i], encoding:null});
    // 通過(guò)buffer的方式上傳到cdn
    await store.put(`beauty/cp-${path.basename(urls[i])}`, fetchResult);
  }

  // 關(guān)閉無(wú)頭瀏覽器
  await browser.close()
}
getWelfareImage('http://jandan.net/ooxx')

cdn地址:http://iuap-tenat-market.oss-cn-beijing.aliyuncs.com/beauty/cp-0076BSS5ly1fw6wbx5318j30hs0qognc.jpg

注意:

在new oss()傳入的對(duì)象中需重新改寫超時(shí)時(shí)間agent、timeout,具體的可以看oss中源碼。

{
    accessKeyId: '***',
    accessKeySecret: '***',
    bucket: '***',
    region: 'oss-cn-beijing',
    agent: new AgentKeepAlive({
      timeout: '30m',
    }),
    timeout: '30m'
}

同時(shí),也做了一個(gè)node cli 上傳cdn的工具包(ac-tools cdn),cdn功能只是其中一個(gè)。

鏈接地址 ac-tools

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

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