개발일지

nodejs+ puppeteer (크롤링) 개발일지

입재 2020. 1. 17. 01:15

상품 2000개를 크롤링하고 그 상품들의 상세페이지를 이미지로 만들어 스토리지에 올리려다
난관에 봉착했다. 2000번을 돌면서 페이지를 하나씩 순차적으로 직렬로 돌자니 상품 하나당 10초미만으로 걸리고..

병렬로 돌리려니 하드웨어에 한계가... 그래서 직렬과 병렬을 조합해서 만들었더니 효과는 굉장했다.

이 방법보다 좀더 나은 방법을 멘토형한테 물어봐야겠다..

 

for(let [key, val] of res.entries()){
    
    await Promise.all(val.map( async (element, idx) => {
      
      const page = await browser.newPage()
      let fileName = `${element.storeType}_${key}_${idx}.png`

      await page.goto(element.url)
      await page.waitFor(1000)
      const elementTarget = await page.$('#goods-description')
      // // await elementTarget.screenshot({ path: fileName })
      await page.close()
      console.log(fileName)
      // console.log(fileName)
      // element['descUrl'] = await uploadImage(`test/${fileName}`, fileName)
      // await deleteFile(`${element.storeType}_${idx}.png`)
    }))
  }