Node.js로 웹 크롤링하기

Node.js로 웹 크롤링하기

(6개의 수강평)

235명의 수강생
55,000원
지식공유자 · 조현영
75회 수업· 총 12시간 59분수업
평생 무제한 시청
수료증 발급 강의
수강 난이도 초급, 중급
김도영 프로필

프록시도 한계가 있나요? 김도영 11일 전

다른 사람이 그 프록시 서버를 써서

특정 서비스에서 해당 IP를 막으면,

그 프록시 서버는 못쓰게 되나요?

1
mine7717 프로필

5개씩 순차적으로 크롤링도 가능한가요 ? mine7717 15일 전

크롤링이 한번에 되던 문제는 덕분에 잘 해결하였습니다.

전체가 179개이다보니 강제로 시간 딜레이를 주게되어 소요시간이 오래걸려서요.. 혹시 await로 순차적으로 하긴 하지만 5개씩 묶어서 할 수 있는 효율적인 방법이 있을까요 ?

아니면 다른 방안을 찾아내어 고정 딜레이가 아닌 waitForSelector 과 같은 것을 이용해야 할까요 ?

1
mine7717 프로필

크롤링 순차적으로 하는방법. mine7717 15일 전

지난번에 친절히 답변해주시고 좋은강의 해주셔서 크롤링을 아주 손쉽게 끝냈습니다.

이번에 DB에서 ID 값을 가지고 와서 크롤링을 돌리는 것을 하고 있습니다.

그런데 실행하니 총 179개의 id 값을 한번에 불러와서 크롬을 수십개 켜면서 작업을 하더라구요.. 

물론 노트북이 버벅이고 메모리 에러가 발생해서 타임아웃으로 꺼졌지만..

그래서 강의 부분중에 promiseall 이랑 for of 에 대해 다시 보았는데 이해가 잘 안되서요

결국 이걸 순차적으로 1부터 179까지 실행하려면 for of 를 쓰는건데 async await과 어떻게 연계해야 할지 조언 부탁드립니다.

단순히 강의 내용대로 쓰고 구글링해서 쓰니 for of 자체는 내부의 값을 차례대로 불러오기만 하더라구요

간단히 작성해보면 for( const value of cust_id) { crawler(value); } 이렇게 했는데 아마도 crawler이라는 함수가 끝나면 다음것을 해야할 것 같은데 어떤식으로 해결해야 할까요 ?

3
tnqls0120 프로필

Error: net::ERR_PROXY_CONNECTION_FAILED tnqls0120 16일 전

제로초님 코드 그대로 따라했는데 아래와 같은 에러가 발생합니다.

Error: net::ERR_PROXY_CONNECTION_FAILED at https://search.naver.com/search.naver?sm=top_hty&fbm=1&ie=utf8&query=%EB%82%B4+%EC%95%84%EC%9D%B4%ED%94%BC

프록시 데이터들은 DB에 잘 저장되어어있는데 뭐가 문제일까요?

1
mine7717 프로필

클라이언트 단에서 puppeteer 을 사용하는 방법이 있나요 ? mine7717 16일 전

puppeteer을 활용한 크롤링에 대한 강의 잘 보고 있습니다.

제가 목표로 하고 있는 것이 DB에서 ID 값을 가지고 와서 특정 페이지에 넣고 나오는 데이터를 크롤링해서 다시 DB에 넣는 것인데요

그것을 localhost:3000 번에서 하고 싶습니다. 제 서버로 접속하면 단지 버튼이 하나 있고

들어가서 버튼을 누르면 위에 목표대로 크롤링이 수행이 되도록 하는 것 인데요.. 지난번에 puppeteer로 하려고 하니

클라이언트 단 그러니까 브라우저에서는 puppeteer을 사용하지 못한다고 하더라구요. 어떤식으로 피해가거나 해결 할 수 있을까요 ?

2
rrallvv .J 프로필

구글 로그인 couldn't sign you in 에러 rrallvv .J 17일 전

구글 로그인 만들고 있는데요.

Couldn't sign you in

                                           구글 계정 아이디

Try using a different browser. If you’re already using a supported browser, you can refresh your screen and try again to sign in. 

https://www.reddit.com/r/firefox/comments/edxse8/this_browser_or_app_may_not_be_secure_when/

이 url과 같은 에러가 나오는데, agent를 바꾸고, user profile을 추가해봐도 이 에러에서 더 넘어갈수가 없어서요 ㅠㅠ

어떻게 해야하나요?

1
김도영 프로필

이미지 크롤링 질문입니다.! 김도영 18일 전

https://try-puppeteer.appspot.com/

알려주신 위 사이트에서 이미지 없이 네이버 영화 사이트 접속했는데 무한루프가 도는겁니다.

네이버 영화 사이트측에서 다운로드 실패시 다시 되도록 자동설정해놔서그런건가요?

const browser = await puppeteer.launch();

  const page = await browser.newPage();

  await page.setRequestInterception(true);

  page.on('request', request => {

    if (request.resourceType() === 'image')

      request.abort();

    else

      request.continue();

  });

  await page.goto('https://movie.naver.com/movie/bi/mi/basic.nhn?code=189001');

  await page.screenshot({path: 'news.png', fullPage: true});

  await browser.close();

2
김도영 프로필

Promise All 질문 김도영 18일 전

노드 강좌에서 

PromiseAll 에 Promise 객체들을 넣는것 까지는 알았는데

크롤러 강좌중에 

Promise.all 해서 안에다 Map함수를 쓰는 코드는 어떻게 이해해야 하죠? map에서 프로미스 객체를 리턴하는것도 아닌데, promise.all 이 알아서 await 부분이 있는 모든 Promise객체를 모아서 처리하나요? 

    await Promise.all(
      records.map(async (r, i) => {
        try {
          const page = await brs.newPage();
          await page.goto(r[1]);
          const scoreEl = await page.$(".score.score_left .star_score");
          if (scoreEl{
            const text = await page.evaluate(tag => tag.textContent, scoreEl);
            console.log(r[0], "rate", text.trim());
          }
          await page.close();
        } catch (e{
          console.error(e);
        }
      })
    );

1
김도영 프로필

헤드리스 옵션 질문있습니다. 김도영 18일 전

헤드리스를 쓰면, 화면이 랜더링이 아예 안되는건가요? 

그러면 axios에서 텅빈 HTML를 가져오는것 처럼 될 수 있지 않나요?

아니면 단지 크롬 창만 안뜨는건지 궁금합니다. 

2
Jony son 프로필

4-3 강좌 'src' of null 에러 질문입니다. Jony son 26일 전

안녕하세요 강사님

깃허브 가서 강사님께서 작성하신 현재 nDTlD로 class가 되어있어서 변경해서 넣어보았습니다.

그리고 아래 같은 질문에 강사님 답변이 있어서 강사님 코드에서 while (result.length <= 30) {  <- 이 부분 바로 앞에 await page.waitForSelector('.nDTlD'); 를 넣어보고 해보았습니다.

https://github.com/ZeroCho/nodejs-crawler/blob/master/7.image-scroll/index.js

(강사님 코드 주소입니다.)

하지만 제가 해본 결과로는 같은 에러가 발생하여 질문을 드립니다.

혹시 한번만 더 확인을 해 주실 수 있을까요??

제가 해보기로는 querySelectorAll('.nDTlD img.2zEKz') 을 해서 src를 검출했을 떄는 에러가 나지 않지만 .nDTlD로 먼저 추출한 후 evaluate 함수 안에서 src 작업을 하면 에러가 나는 것 같습니다.

시간 나실때 한번 확인 해 주시고 답변해주시면 감사하겠습니다.

3
boutime2017 프로필

버튼 입력 후 url 변경 시 태그 캐치 boutime2017 1달 전

선생님 퍼페티어로 특정 페이지에서 특정 정보를 입력한 후 그 정보를 submit한 뒤에 페이지가 url이 바뀌는데, 이 때부터 아무리 선택자를 긁어와도 해당 선택자가 없다고 뜹니다. 혹시 페이지가 바뀐 뒤에 태그를 감지하기 위해 따로 설정해줘야 하는 것이 있을까요? 제가 크롤링을 시도한 주소는 http://www.letskorail.com/ebizbf/EbizBfTicketSearch.do

입니다.

1
문성중 프로필

Dynamic loding문제에 관한 질문 문성중 1달 전

강의 잘듣고

크롤링업무에 엄청 도움 받고 있습니다.

알라딘에서 도서정보를가져오는 크롤링을 해보고 있는데

dynamic page loading문제인것 같은데 며칠째 고생하고 있습니다.

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=233312933

postman으로 보면

<div class="Ere_prod_mconts_box">

<div class="Ere_prod_mconts_box">

<div class="Ere_prod_mconts_box">

3개가 보입니다.

개발자도구의 console에서

$$('.Ere_prod_mconts_box')

7개가 나오며 책소개, 목차 부분이 보입니다.

$$('.Ere_prod_mconts_box')[3] 책소개

$$('.Ere_prod_mconts_box')[4] 목차

dynamic loading을 해서 그런것 같은데

scrollBy, waitFor, evaluate를 사용해봐도

puppeteer에서 querySelectAll로 보면 3개밖에 가져오질 못하고 

책 소개부분은 가져오질 못하네요.

제가 어떤 부분을 더 해봐야하는지요....

0
공영길 프로필

이미지 가져오기! 공영길 2달 전

자막으로 querySelectorAll -> querySelector 로 바꾸라고 되있는데.. 이렇게 되면 게시글에 이미지가 여러개일 때는 하나밖에 못가져오는거 아닌가요?? 

문제가 있다고 생각해서 나름대로 코드를 바꿔봣는데 이 코드 어떤가요??

const img = firstFeed.querySelectorAll('[class=mtm] img') && Array.from(firstFeed.querySelectorAll('[class=mtm] img')).map(now => now.src)

1
Se-Hyun Bae 프로필

sequelize init error Se-Hyun Bae 2달 전

sequelize, sequelize-cli 설치 이상없이 완료되었는데, init시 하기와 같이 또는 보안에러를 어떻게 조치하면 될까요?

-----------------------------------------------

sequelize : 이 시스템에서 스크립트를 실행할 수 없으므로 C:\Users\Admin\AppData\Roaming\npm\sequelize.ps1 파일을 로드할 수 없습니다. 자세한

 내용은 about_Execution_Policies(https://go.microsoft.com/fwlink/?LinkID=135170)를 참조하십시오.

위치 줄:1 문자:1

+ sequelize init;

+ ~~~~~~~~~

    + CategoryInfo          : 보안 오류: (:) [], PSSecurityException

    + FullyQualifiedErrorId : UnauthorizedAccess

2
지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스