美文网首页
教你用puppeteer爬取美女图片上传到cdn

教你用puppeteer爬取美女图片上传到cdn

作者: 扶搏森 | 来源:发表于2018-10-14 02:52 被阅读0次

puppetter 是谷歌出的一个无头浏览器,可以用来写e2e单元测试,本文用来爬取美女图片。哈哈,其实爬取简单,上传cdn吃了好大的苦,阿里的oss上传小视频(豆瓣的预告片)一直给报错(用put,buffer,stream都试过,最后才发现是oss的超时时间是nodejs控制的,我一直以为是oss那边控制了超时时间6000ms)

献上我爬取的最好的一张美女图片
beauty gril

async function getWelfareImage (url) {

  // 返回解析为Promise的浏览器
  const browser = await puppeteer.launch()

  // 返回新的页面对象
  const page = await browser.newPage()

  // 页面对象访问对应的url地址
  await page.goto(url, {
      waitUntil: 'networkidle2'
  })

  // 等待3000ms,等待浏览器的加载
  await sleep(1000)

  // 可以在page.evaluate的回调函数中访问浏览器对象,可以进行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地址数组
      return url
  })
  const store = oss(config.ossconfig)
  for (let i = 0; i < urls.length; i++) {
    // request-promise,返回一个buffer对象
    let fetchResult = await rp({url:urls[i], encoding:null});
    // 通过buffer的方式上传到cdn
    await store.put(`beauty/cp-${path.basename(urls[i])}`, fetchResult);
  }

  // 关闭无头浏览器
  await browser.close()
}
getWelfareImage('http://jandan.net/ooxx')

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

注意:

在new oss()传入的对象中需重新改写超时时间agent、timeout,具体的可以看oss中源码。

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

同时,也做了一个node cli 上传cdn的工具包(ac-tools cdn),cdn功能只是其中一个。

链接地址 ac-tools

相关文章

网友评论

      本文标题:教你用puppeteer爬取美女图片上传到cdn

      本文链接:https://www.haomeiwen.com/subject/glzaaftx.html