55,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결Node.js로 웹 크롤링하기
현재 페이스북 로그인 화면이 좀 바뀌었는데,
페이스북 로그인 버튼 예를 들어 document.querySelector('#loginbutton').click() 강좌의 이런 라벨이 사라졌어요버튼 바로 위가 div 태그인데, div 태그를 클릭하면 반응이 없고,버튼 클래스 이름의 태그를 클릭 해야지만 반응이 있네요 이 부분은 어떻게 다루는게 좋을까요?
- 미해결Node.js로 웹 크롤링하기
3-3 퍼페티어 스크린샷 기능 중 클립 소개에서 궁금한 사항
3-3 퍼페티어 스크린샷 기능 중 클립 소개에서 궁금한 사항입니다.크롤링할때 같은 동작을 하더라도 키워드마다 배치가 조금씩 다르기 때문에 좌표로 스크린샷하는것은 사실상 불가능합니다.그렇다고 전체페이지를 하는것도 리스크가 심합니다.딱 원하는 구간에 대한 스크린샷이 중요한데,결론은원하는 태그, 원하는 엘리먼트 딱 그부분예) div#id / 이런식으로 이구간만 찍고 싶은데 이부분 소개가 없어서요 이게 정말 꿀기능일 텐데 퍼페티어로 가능할지 아니면 다른 것으로라도 가능할지 궁금해요
- 미해결Node.js로 웹 크롤링하기
puppeteer waitFor 이제 못쓰나요?
puppeteer waitFor 이제 못쓰나요? 자동완성어로도 안 만들어지고, 예제처럼 반영도 안돼요waitForTimeout 이걸 써야 반영되는데, 이것도 이제 지원안한다는 문구가 뜨네요
- 미해결Node.js로 웹 크롤링하기
Error: invalid column -1
도저히 어떤 부분이 틀린지 모르겠어서 질문 남깁니다.. 이 부분은 깃헙에 없는건가요?? C:\Users\96tmd\OneDrive\바탕 화면\새 폴더\lecture\node_modules\xlsx\xlsx.js:4095function encode_col(col) { if(col < 0) throw new Error("invalid column " + col); var s=""; for(++col; col; col=Math.floor((col-1)/26)) s = String.fromCharCode(((col-1)%26) + 65) + s; return s; } ^Error: invalid column -1 at encode_col (C:\Users\96tmd\OneDrive\바탕 화면\새 폴더\lecture\node_modules\xlsx\xlsx.js:4095:46) at write_ws_xml_data (C:\Users\96tmd\OneDrive\바탕 화면\새 폴더\lecture\node_modules\xlsx\xlsx.js:14999:52) at write_ws_xml (C:\Users\96tmd\OneDrive\바탕 화면\새 폴더\lecture\node_modules\xlsx\xlsx.js:15077:11) at write_zip_xlsx (C:\Users\96tmd\OneDrive\바탕 화면\새 폴더\lecture\node_modules\xlsx\xlsx.js:23532:25) at write_zip (C:\Users\96tmd\OneDrive\바탕 화면\새 폴더\lecture\node_modules\xlsx\xlsx.js:23326:9) at write_zip_type (C:\Users\96tmd\OneDrive\바탕 화면\새 폴더\lecture\node_modules\xlsx\xlsx.js:23753:10) at writeSync (C:\Users\96tmd\OneDrive\바탕 화면\새 폴더\lecture\node_modules\xlsx\xlsx.js:23891:22) at Object.writeFileSync (C:\Users\96tmd\OneDrive\바탕 화면\새 폴더\lecture\node_modules\xlsx\xlsx.js:23914:9) at crawler (C:\Users\96tmd\OneDrive\바탕 화면\새 폴더\lecture\index.js:76:8) at processTicksAndRejections (node:internal/process/task_queues:96:5)C:\Users\96tmd\OneDrive\바탕 화면\새 폴더\lecture>
- 미해결Node.js로 웹 크롤링하기
document.querySelectorAll이 안되는 사이트
유튜브 음악 차트 사이트로 연습을 하려고 하는데 선택자로 선택을 하려해도 이상한 function 정보가 나오네요. 이렇게 막아놓은(?) 사이트는 크롤링을 할 수 없나요?https://charts.youtube.com/charts/TopSongs/kr?hl=ko + 이런거는 크롤링 방지나 보안 등을 위해 내장 함수(?)들을 의도적으로 바꿔놓은 것인가요? 감사합니다.
- 미해결Node.js로 웹 크롤링하기
proxy 서버로 네이버 접근시 Error: net::ERR_TUNNEL_CONNECTION_FAILED 발생
connection fail이라 아예 연결 자체가 안되는거 같아 혹시 프록시 ip가 문제인가 고민해봤습니다. 문제 해결을 위해 한것const filtered = proxies.filter((v) => v.type.startsWith('HTTP')).sort((a,b) => a.latency - b.latency)1. 하나의 ip는 다운됫을수도 있기에 filtered[0].ip 뿐만아닌 차선책으로 filtered[1].ip, filtered[2].ip.. 등 여러 ip를 시도했지만 모두 같은 에러를 반환2. proxy-chain이라는 라이브러리를 인스톨하여 해당 라이브러리에 있는 메소드를 사용let fastestIp = await proxyChain.anonymizeProxy(`http://${filtered[0].ip}`) browser = await puppeteer.launch({headless:false, args:['--window-size=1920,1080', '--disable-notifications', `--proxy-server=${fastestIp}`]}) 1번 2번 모두 같은 에러를 반환하며 실패하였습니다. 해당 에러가 정확하게 어떤에러인지 또 어떤것을 시도해 봐야할지 조언 부탁드립니다.
- 미해결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로 웹 크롤링하기
프록시 서버 연결 문제
이전 질문에도 있었는데 프록시 서버 연결이 안되는데 혹시 이유가 무엇일까요?코드를 그대로 작성해서 하여도 접속이 안되네요.ip를 1~2개가 아니라 10개 이상을 다른 것들로 해봤는데도 안되서 프록시 서버의 문제보다도 다른 문제가 있는 게 아닐까 싶어서요.(이전 문제들에 답변에는 다른 프록시 서버를 써보라고 하셔서 10개 이상 시도를 해본 뒤 질문드립니다(다른 사이트의 프록시 서버도 사용해보았습니다). 포트번호를 넣어서도 해보고 빼보고도 해보고 http도 붙여보고 별 난리를 다 해봤네요)감사합니다.+) 결과 화면감사합니다.
- 미해결Node.js로 웹 크롤링하기
중간단계부터 puppeteer 시작
puppeteer를 중간단계부터 시작할 수 있는 방법이 있을까요?가령 페이스북 자동 로그인/로그아웃 예제에서 로그인부터 하는 것이 아니라 로그인한 화면을 크로미움에 띄워놓고 로그아웃만 한다거나 그런식으로요.자동화 작업을 중간 단계부터 할 방법은 없는 걸까요?(무언가 키를 누르면 그 때부터 작동하게 하는 방법도 좋을 것 같습니다)
- 미해결Node.js로 웹 크롤링하기
엑셀 파일은 깃허브에 있나요?
영상에서 깃허브 주소가 짤립니다.깃허브 전체 주소 알려주세요~
- 미해결Node.js로 웹 크롤링하기
요즘 트위터는
iframe 태그를 사용하지 않는걸까요?
- 미해결Node.js로 웹 크롤링하기
로그인 오류
브라우저 또는 앱이 안전하지 않을 수 있습니다. 라고 뜨며 다음 버튼이 클릭되지 않습니다. 해결방법이 있을까요?
- 미해결Node.js로 웹 크롤링하기
선생님 아무리 해도 안되는 부분이 있어서 올립니다.ㅜㅠㅜㅜ
해당 영상에서는 postman에서 안켜지는 동적으로 나온 이미지들을 selector를 이용해서 가져오는 것으로 보이는데요. 아래의 코드를 사용해서 카카오맵 상세화면 크롤링 해오려고 하는데 셀렉터로 찾게된 div class 'info_menu'를 찾으면 아무것도 안 나옵니다.. 제발 도와주세요..ㅠㅠㅠ 이거하려고 강의 구매한 건데 못하겠어요ㅠㅠㅠㅠ stackoverflow 에서 검색해보고 찾긴했습니다. .. await page.goto('https://place.map.kakao.com/873103765', { waitUntil: "networkidle0" }); 이렇게 해주니 되었습니다. const fs = require("fs"); const puppeteer = require("puppeteer"); const axios = require("axios"); //ajax 라이브러리 const cheerio = require("cheerio"); //html 파싱 const crawler = async () => { try { const browser = await puppeteer.launch( {headless : false} ); const page = await browser.newPage(); await page.goto('https://place.map.kakao.com/915459672'); const result = await page.evaluate(()=>{ const scoreEl = document.querySelector('div.info_menu'); if(scoreEl){ console.log('있다!!'); return scoreEl.outerHTML; }else{ console.log('없다!!'); return []; } }); console.log(result); await browser.close(); } catch (e) { console.error(e); } }; crawler();
- 미해결Node.js로 웹 크롤링하기
질문
sequelize 의 upsert 를 사용할때어떤 기준으로 update 되었다고 판단하는 건가요?강의에서는 ip 가 unique: true 라서 ip 를 기준으로 업데이트 되나요?
- 미해결Node.js로 웹 크롤링하기
결과값 []
안녕하세요 제로초님 결과값이 [] 로 나오는 이유가 뭔가요..ㅜㅜ 태그문제일까요..
- 미해결Node.js로 웹 크롤링하기
이 에러는 어떤문제가 있는건가요?
안녕하세요 제로초님 크롤링 중에 이 에러가 계속 뜨는데 무슨 문제인지 모르겠습니다ㅠㅠ
- 미해결Node.js로 웹 크롤링하기
ul 안에 있는 li 선택이 안됩니다
안녕하세요 제로초님!! ul 안에 li 어떻게 선택하나요??
- 미해결Node.js로 웹 크롤링하기
Iframe 중첩 상황에서 크롤링 방법
안녕하세요 현재 노드 크롤러 강의를 완강하고 응용해서 연습하는 중에 있습니다. 혹시 첨부된 이미지처럼 page 안에 iframe, 또 그 iframe 안에 iframe이 있는 경우, 가장 안쪽에 있는 iframe은 어떻게 크롤링할 수 있을까요?
- 미해결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로 웹 크롤링하기
xlsx.readFile 질문
라우터를 거치지 않고 매시간마다 엑셀 파일을 읽은 후 읽은 데이터를 활용하여 크롤링해서 데이터베이스에 넣는 기능을 구현 중입니다. node-schedule을 활용하여 controllers 폴더에서 실행시켰는데 분명 경로가 틀리지 않았는데 엑셀 파일을 읽지 못하네요 app.js에서는 되는데 이쪽에서 하면 데이터베이스와 퍼펫티어 코드가 들어가 지저분해질 거 같아 controllers에서 처리해 주려고 합니다. controllers폴더에서 파일을 읽지 못하는 문제가 궁금합니다.