묻고 답해요
121만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Node.js로 웹 크롤링하기
크롤링 자바스크립트 exe파일
안녕하세요!! 크롤링 강의 너무 잘들었습니다!!이 강의를 듣고 더 무언가를 해보고 싶어, 질문드립니다!!강의 내용 중 unsplash사이트에서 이미지를 가져오는 내용이 있는데요.이 코드를 돌리는데 명령어가 아닌 js파일을 exe실행 파일로 만든 후 exe파일을 눌었을 경우 코드가 실행되기 위해서 npm의 pkg를 사용하여 만들었는데 실행이 안되서요..ㅠ강의자님은 js파일을 exe실행 파일로 만들으셔서 사용하실 때 어떤 방법을 이용하시나요?!
-
미해결Node.js로 웹 크롤링하기
puppeteer 관련
headless : false 로 설정해서 실행을 하면...생각보다 자주 크로니움이 많이 튕기며 오류를 발생시킵니다.puppeteer 와 puppeteer-core 업데이트도 진행했고, 크롬브라우져도 최신버젼을 사용하고 있습니다. 혹시 팁있을까요?
-
해결됨Node.js로 웹 크롤링하기
6-3 proxy-database 관련
sequelize-cli 까지 설치가 된거 같긴 한데... sequelize init 을 누르면 그림과 같이 오류가 떠요~ mac 에서 nvm 도 설치하고, 이것저것 계속 했는데도 잘 안됩니다. 아래 작업도 했는데도, 안돼서 진도를 3시간째 못나가고 있네요. 도움 주시면 감사하겠습니다. ㅠㅠ 정말 열심히 듣고 있는데.. ㅠ
-
미해결Node.js로 웹 크롤링하기
크롤링을 여러개 돌리려면 어떠한 방법을 선택하는게 좋을까요?
안녕하세요, 지금 Puppeteer로 크롤링을 하고있는데 예를들어서 1 ~ 10까지 작업이 각각 있다고했을때 이 10가지의 크롤링 작업을 완료하는데 너무 오래걸려서 Multi Processing 혹은 Multi Thread 방식을 생각하고 있습니다. 둘중에 어떠한게 좋을까요? Puppeteer 1개(node process 1개)로 1~10까지 돌렸을때 너무 오래걸려서 이걸 각각의 작업당 프로세스 1개를 붙힐것인지, 아니면 Process는 하나인데 Worker Thread를 여러개 만들어서 Main 스레드는 1번 작업, 나머지 9개 Worker Thread 생성해서 각각 작업에 한개씩 붙혀서 작업하게끔 하는게 좋을지 고민하고 있는데 혹시 어떠한 방법이 좋을까요 ?혹시 설명이 부족할까봐 좀 구체적으로 예시를 남기면,<기존방식>작업들: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10이름이 main.js인 1개 자바스크립트 파일을 node main.js로 실행 및 이걸로 그냥 1~10까지 작업들을 모두 동기적으로 처리>> 너무 시간이 오래걸림<원하는 방식 및 고민하고 있는 2가지 방식>작업들: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10이름이 main.js인 1개 자바스크립트 파일이 있고 process.argv로 인자를 줘서 아래와 같이 node process를 10개를 생성하여 각각 작업들을 1개의 프로세스들이 실행node main.js 1node main.js 2node main.js 3 ...node main.js 10 이름이 main.js인 1개 자바스크립트 파일이 있고 거기에서 Worker Thread 9개를 만들어서 Main Thread는 1번작업에 붙히고, 만든 9개 Worker Thread를 각각 2,3,4 ~ 10까지의 작업에 각각 한개씩 붙혀서 작업감사합니다
-
미해결Node.js로 웹 크롤링하기
아래 noscript 내용입니다.
const puppeteer = require('puppeteer'); const dotenv = require('dotenv'); dotenv.config(); const crawler = async () => { try { const browser = await puppeteer.launch({ headless: false, args: ['--window-size=1920,1080', '--disable-notifications'] }); const page = await browser.newPage(); await page.setViewport({ width: 1080, height: 1080, }); await page.goto('https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=서울+지게차'); await page.waitFor(3000); await page.evaluate(() => { window.scrollBy(0, 1500); document.querySelector('#loc-main-section-root > section > div > div.api_more_wrap > a').click(); }); await page.waitFor(3000); await page.waitFor(3000); await page.evaluate(() => { document.querySelector('#_pcmap_list_scroll_container > ul > li:nth-child(1) > div.qbGlu > div.ouxiq.icT4K > div > div > span > a > span.hClKF').click(); }); await page.waitFor(3000); await page.evaluate(() => { document.querySelector('#_pcmap_list_scroll_container > ul > li:nth-child(1) > div.qbGlu > div.ouxiq.icT4K > div > div > div > div:nth-child(1) > span.RUjqr > a').click(); }); } catch (e) { console.error(e); } }; crawler(); Error: Evaluation failed: TypeError: Cannot read properties of null (reading 'click') at __puppeteer_evaluation_script__:2:151 at ExecutionContext._evaluateInternal (/Users/youssi/Downloads/nodejs-crawler-master/lecture/node_modules/puppeteer/lib/ExecutionContext.js:122:13) at processTicksAndRejections (node:internal/process/task_queues:96:5) at async ExecutionContext.evaluate (/Users/youssi/Downloads/nodejs-crawler-master/lecture/node_modules/puppeteer/lib/ExecutionContext.js:48:12) at async crawler (/Users/youssi/Downloads/nodejs-crawler-master/lecture/index.js:53:5) -- ASYNC -- at ExecutionContext.<anonymous> (/Users/youssi/Downloads/nodejs-crawler-master/lecture/node_modules/puppeteer/lib/helper.js:111:15) at DOMWorld.evaluate (/Users/youssi/Downloads/nodejs-crawler-master/lecture/node_modules/puppeteer/lib/DOMWorld.js:112:20) -- ASYNC -- at Frame.<anonymous> (/Users/youssi/Downloads/nodejs-crawler-master/lecture/node_modules/puppeteer/lib/helper.js:111:15) at Page.evaluate (/Users/youssi/Downloads/nodejs-crawler-master/lecture/node_modules/puppeteer/lib/Page.js:833:43) at Page.<anonymous> (/Users/youssi/Downloads/nodejs-crawler-master/lecture/node_modules/puppeteer/lib/helper.js:112:23) at crawler (/Users/youssi/Downloads/nodejs-crawler-master/lecture/index.js:53:16) 에러가 납니다. 구글 개발자도구에서 select an element~~~ 누르고 나서야 document.querySelector('#_pcmap_list_scroll_container > ul > li:nth-child(1) > div.qbGlu > div.ouxiq.icT4K > div > div > span > a > span.hClKF').click(); });위 소스가 정상적으로 작동을 합니다. 찾아보니 Javascript를 사용하여 브라우저에서 렌더링하는 웹 페이지를 가져오려고 합니다. 즉, Http Request Node를 사용하여 수신하는 초기 응답에 현재 검색 중인 데이터가 포함되지 않습니다. 당신의 데이터는 자바스크립트 안에 로드되어 브라우저에 의해 html에 삽입될 것입니다.이것과 비슷한 거 같습니다. 크롤링이 안되는 것일까요??
-
미해결Node.js로 웹 크롤링하기
크롤링
2달 전에 수업을 듣고 이제 네이버 지도를 크롤링을 하려고 하는데 noscript때문인지크롤링이 안되네요?혹시 noscript는 크롤링을 할 수 있는 방법이 있나요?
-
미해결Node.js로 웹 크롤링하기
앱 크롤링
수업 잘듣고 있습니다교육내용가 관련없지만웹말고 앱 크롤링이 가능한가요?
-
미해결Node.js로 웹 크롤링하기
페이스북 로그인
<button value="1" class="_42ft 4jy0 6lth 4jy6 4jy1 selected 51sy" name="login" data-testid="royallogin_button" type="submit" id="u_0_c_Cc">로그인</button> document.querySelector('#u_0_9_LS').click();위에 같이 실행하였는데 id값이 계속 변동하여 로그인 안되어서 document.querySelector('._42ft _4jy0 _6lth _4jy6 _4jy1 selected _51sy').click();class로 했는데도 로그인 안되네요 ??방법이 없나요?
-
미해결Node.js로 웹 크롤링하기
2019년도 영상이라 error가 나는 걸까요? 2-4. csv에 출력하기에서 error
v16.19.18.19.3mac 2-4. csv에 출력하기 Error: Protocol error (Target.createTarget): Target closed.at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56at new Promise (<anonymous>)at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47)at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26)at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33)at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)-- ASYNC --at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)Error: Protocol error (Target.createTarget): Target closed.at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56at new Promise (<anonymous>)at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47)at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26)at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33)at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)-- ASYNC --at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)Error: Protocol error (Target.createTarget): Target closed.at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56at new Promise (<anonymous>)at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47)at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26)at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33)at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)-- ASYNC --at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)Error: Protocol error (Target.createTarget): Target closed.at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56at new Promise (<anonymous>)at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47)at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26)at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33)at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)-- ASYNC --at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)Error: Protocol error (Target.createTarget): Target closed.at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56at new Promise (<anonymous>)at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47)at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26)at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33)at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)-- ASYNC --at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)Error: Protocol error (Target.createTarget): Target closed.at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56at new Promise (<anonymous>)at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47)at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26)at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33)at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)-- ASYNC --at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)Error: Protocol error (Target.createTarget): Target closed.at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56at new Promise (<anonymous>)at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47)at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26)at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33)at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)-- ASYNC --at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)Error: Protocol error (Target.attachToTarget): Target closed.at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56at new Promise (<anonymous>)at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12)at Connection.createSession (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:153:36)at Target._sessionFactory (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:116:75)at Target.page (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Target.js:73:32)at Target.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:177:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)at async /Users/youssi/crawler/lecture/index.js:15:20-- ASYNC --at Target.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:177:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)at async /Users/youssi/crawler/lecture/index.js:15:20at async Promise.all (index 0)at async crawler (/Users/youssi/crawler/lecture/index.js:13:5)-- ASYNC --at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)Error: Protocol error (Target.attachToTarget): Target closed.at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56at new Promise (<anonymous>)at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12)at Connection.createSession (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:153:36)at Target._sessionFactory (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:116:75)at Target.page (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Target.js:73:32)at Target.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:177:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)at async /Users/youssi/crawler/lecture/index.js:15:20-- ASYNC --at Target.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:177:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)at async /Users/youssi/crawler/lecture/index.js:15:20at async Promise.all (index 1)at async crawler (/Users/youssi/crawler/lecture/index.js:13:5)-- ASYNC --at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)Error: Protocol error (Target.attachToTarget): Target closed.at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56at new Promise (<anonymous>)at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12)at Connection.createSession (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:153:36)at Target._sessionFactory (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:116:75)at Target.page (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Target.js:73:32)at Target.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:177:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)at async /Users/youssi/crawler/lecture/index.js:15:20-- ASYNC --at Target.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:177:31)at processTicksAndRejections (node:internal/process/task_queues:96:5)at async /Users/youssi/crawler/lecture/index.js:15:20at async Promise.all (index 2)at async crawler (/Users/youssi/crawler/lecture/index.js:13:5)-- ASYNC --at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15)at /Users/youssi/crawler/lecture/index.js:15:34at Array.map (<anonymous>)at crawler (/Users/youssi/crawler/lecture/index.js:13:31)at processTicksAndRejections (node:internal/process/task_queues:96:5) index.jsconst parse = require('csv-parse/lib/sync'); const stringify = require('csv-stringify/lib/sync'); const fs = require('fs'); const puppeteer = require('puppeteer'); const csv = fs.readFileSync('csv/data.csv'); const records = parse(csv.toString('utf-8')); const crawler = async () => { try{ const result = []; const browser = await puppeteer.launch({ headless: false }); await Promise.all(records.map(async (r, i) => { try{ const page = await browser.newPage(); await page.goto(r[1]); const scoreEl = await page.$('.score.score_left .star_score'); if (scoreEl) { const text = await page.evaluate((tag) => { return tag.textContent; }, scoreEl); console.log(r[0], '평점', text.trim()); result.push([r[0], r[1], text.trim()]); } await Page.waitFor(3000); await page.close(); } catch (e) { console.error(e); } })); await browser.close(); const str = stringify(result); fs.writeFileSync('csv/result.csv', str); } catch (e) { console.error(e); } }; crawler(); package.json{ "name": "lecture", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "node index" }, "author": "youssi", "license": "MIT", "dependencies": { "axios": "^1.3.4", "cheerio": "^1.0.0-rc.12", "csv-parse": "^4.4.6", "csv-stringify": "^5.3.0", "puppeteer": "^1.13.0", "xlsx": "^0.18.5" } }
-
미해결Node.js로 웹 크롤링하기
안녕하세요! for of와 Promise.all 차이점에 관해서 질문드려요!
[제로초 강좌 질문 필독 사항입니다]질문에는 여러분에게 도움이 되는 질문과 도움이 되지 않는 질문이 있습니다.도움이 되는 질문을 하는 방법을 알려드립니다.https://www.youtube.com/watch?v=PUKOWrOuC0c0. 숫자 0부터 시작한 이유는 1보다 더 중요한 것이기 때문입니다. 에러가 났을 때 해결을 하는 게 중요한 게 아닙니다. 왜 여러분은 해결을 못 하고 저는 해결을 하는지, 어디서 힌트를 얻은 것이고 어떻게 해결한 건지 그걸 알아가셔야 합니다. 그렇지 못한 질문은 무의미한 질문입니다.1. 에러 메시지를 올리기 전에 반드시 스스로 번역을 해야 합니다. 번역기 요즘 잘 되어 있습니다. 에러 메시지가 에러 해결 단서의 90%를 차지합니다. 한글로 번역만 해도 대부분 풀립니다. 그냥 에러메시지를 올리고(심지어 안 올리는 분도 있습니다. 저는 독심술사가 아닙니다) 해결해달라고 하시면 아무런 도움이 안 됩니다.2. 에러 메시지를 잘라서 올리지 않아야 합니다. 입문자일수록 에러메시지에서 어떤 부분이 가장 중요한 부분인지 모르실 겁니다. 그러니 통째로 올리셔야 합니다.3. 코드도 같이 올려주세요. 다만 코드 전체를 다 올리거나, 깃헙 주소만 띡 던지지는 마세요. 여러분이 "가장" 의심스럽다고 생각하는 코드를 올려주세요.4. 이 강좌를 바탕으로 여러분이 응용을 해보다가 막히는 부분, 여러 개의 선택지 중에서 조언이 필요한 부분, 제 경험이 궁금한 부분에 대한 질문은 대환영입니다. 다만 여러분의 회사 일은 질문하지 마세요.5. 강좌 하나 끝날 때마다 남의 질문들을 읽어보세요. 여러분이 곧 만나게 될 에러들입니다.6. 위에 적은 내용을 명심하지 않으시면 백날 강좌를 봐도(제 강좌가 아니더라도) 실력이 늘지 않고 그냥 코딩쇼 관람 및 한컴타자연습을 한 셈이 될 겁니다. 안녕하세요! 1-5 Promise.all 과 for of 문의 차이 강의 듣고 궁금한 점이 생겨서 질문드립니다!Promise.all 이 동시에 진행되어 속도가 빠른 대신 순서가 보장되지 않는다고 하셨고 for of는 순서대로 요청을 보내고 응답을 받기 때문에 속도가 좀 느리다고 하셨는데현업에서 많은 양의 데이터를 순서대로 크롤링 해야하는 경우에 Promise.all로 빠르게 크롤링 데이터를 받아와서 정렬을 하는게 나은가요 아니면 for of로 느리더라도 순서대로 데이터를 받아오는게 나은가요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
puppeteer 의 waitForTimeout 메소드 deprecated
안녕하세요.puppeteer 에서 waitForTimeout 실행하면 deprecated 되었다고 합니다. 대신 어떤 메소드를 사용해야 할까요?검색해보니 다양한게 있던데 waitForNetworkIdle(1000) 정도면 될까요? https://stackoverflow.com/questions/46919013/puppeteer-wait-n-seconds-before-continuing-to-the-next-line
-
미해결Node.js로 웹 크롤링하기
cheerio deprecated
const crawler = async() => { await Promise.all(records.map( async(r) => { const response = await axios.get(r.링크) if(response.status === 200){ const html = response.data const $ = cheerio.load(html) const text = $('.score.score_left .star_score').text() console.log(r.제목,'평점',text) } } )) }1-4 axios-cheerio로 첫 크롤링하기 강의중 const $ = cheerio.load시 cheerio에 빗금이 처지며 deprecated라는 표시가 뜹니다. 무시하고 그냥 해도 결과는 나오지만 구글링을 해봐도 deprecated대신 사용할수있는게 없어 그냥 해야하나 아니면 다른 방법으로 대체해야하나 궁금합니다.package.json은 아래와 같습니다."dependencies": { "axios": "^1.1.3", "cheerio": "^1.0.0-rc.12", "nodemon": "^2.0.20" }
-
미해결Node.js로 웹 크롤링하기
for of와 Promise.allSettled 질문
exports.test = async () => { const work = xlsx.readFile(path.join(__dirname, "youtuber.xlsx")); const workData = work.Sheets.url; const result = xlsx.utils.sheet_to_json(workData); let array = []; for (const [i, e] of result.entries()) { array.push(e) } try { const browser = await puppeteer.launch({ headless: false, args: ["--window-size:1920,1080"], }); await Promise.allSettled(array.map(async (e) => { try { const page = await browser.newPage(); await page.setUserAgent(agent); await page.setViewport({ width: 1080, height: 1080, }); await page.goto(e.url, { waitUntil: "networkidle2", }); await page.waitForSelector("#channel-header-container img"); const result = await page.evaluate(() => { const channelName = document.querySelector("#text-container yt-formatted-string").textContent; const image = document.querySelector("#channel-header-container img").getAttribute("src"); const subscriber = document.querySelector("#meta yt-formatted-string[id=subscriber-count]").textContent; const activity = document.querySelector("#items ytd-grid-video-renderer:first-child #metadata-line span:nth-child(2)").textContent; return { channelName, image, subscriber, activity, } }); console.log(result); } catch (err) { console.log(err); } })); } catch (err) { console.error(err); } } for of 반복문은 처음과 끝의 코드가 종료가 돼야 다음 반복문을 돌고 Promise.allSettled는 모든 작업을 동시에 처리해서 둘의 차이는 순서 보장되냐 안되냐의 차이로 배웠습니다. 위 코드는 Promise.allSettled로 동시에 10개의 사이트에 접속하여 태그들을 긁고 리턴하는 함수입니다. 태그의 textContent는 모두 긁는데 img 태그의 src 값은 array.map에 가장 처음(0) 사이트만 긁어옵니다. waitForSelector를 사용하여 기다렸는데도 비동기라서 그런지 원인을 잘 모르겠습니다.(for of 문은 됩니다)
-
미해결Node.js로 웹 크롤링하기
readline 으로 사용자 입력을 기다린 후 puppeteer 코드 실행하기
코드 설명 : 사용자의 입력을 받아 입력 데이터를 검색하는 프로그램 11번가 주소로 이동 > 검색창 기다리기 > inputText() 로 입력받기 (inputText.js) > searchText에 저장된 입력데이터를 typing하기 > 검색버튼 누르기 첫번째 사진 15번부터 문제가 생긴듯 합니다. 문제는 입력을 기다리기 전에 밑에 코드들을 시작합니다. 이것을 해결하기 위해 readline-sync npm을 사용해 보았지만 인코딩오류(찾아봤지만 해결이 안됨)때문에 안되더라구요ㅠㅠ 1. 사용자가 입력할 때까지 기다리기 2. 입력한 데이터로 검색하기 이 기능을 구현하려면 어떻게 해야 할까요???
-
미해결Node.js로 웹 크롤링하기
안녕하세요~ puppeteer 실행에 대해 질문이 있습니다!
"2-1 puppeteer 시작하기" 강좌를 보는 중에 아래와 같은 코드를 따라 실행중 오류가 나는 이슈가 있었습니다 const browser = await puppeteer.launch({ headless: false, 오류 메세지도 명확하지 않아 구글링을 해본 결과 옵션값에 executablePath을 추가하여 chrome 파일의 경로를 명시해줬는데 이부분을 제로초님처럼 따로 옵션값을 기입하지 않고 해결할수 있는 방법이 궁금합니다~ const browser = await puppeteer.launch({ headless: false, executablePath: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"});