본문 바로가기

프로그래밍/크롤링(PYTHON)

(11)
크롤러 마음놓고 돌리기 - Scrapinghub Scrapinghub와 관련해서 궁금한 점이 있으시거나 잘못된 정보가 있다면, 댓글로 알려주시면 감사드리겠습니다! 방학동안에 열심히 크롤링을 하고, 블로그 포스팅도하고, 인턴에 지원했는데 합격했다(?). 그래서 약 5개월 간 포스팅이 없다시피 했다. 중간에 갑자기 데이터베이스 관련 포스팅을 올린 건 일하면서 필요해서 올렸고, 사실 상 포스팅이라고 하기에도 분량이 너무 귀엽고 소중했다. 어쨌든, 오늘 다뤄볼 주제는 Scrapinghub라는 서비스에대한 소개로 해볼까한다. 이 글의 카테고리가 "크롤링" 이고, 제목으로 어느정도 유추할 수 있을 듯하다. [광고같은건 아니다..] Scrapinghub는 클라우드 기반으로 크롤링을 비롯한 다양한 기능을 제공하는 웹사이트다. 유저가 크롤러 코드를 작성해서 클라우드에..
더 우아한 크롤러를 위해 / 분산 크롤러 / 크롤러 아키텍쳐 본 게시물은 다양한 외부 소스들을 종합해서 정리하고 기록하기 위한 글입니다. 일부분 필자의 의견이 섞여있으므로 정확한 내용을 알고싶으시다면 하단의 출처를 참고해주세요. 크롤러? 뭐 더 공부할게 있나.. 내가 크롤러에 관심을 갖게 된 후, 주변에서의 크롤링 기술에 대한 인식이 영 긍정적이지만은 않다는 것을 안 것은 불과 몇 주전 이었다. 대기업들한테 가서 크롤링 이야기하면 그래요, "크롤러? 그거 쉬운걸 뭐 굳이.." - 기업초청 세미나에서 A 빅데이터 회사 대표이사 상당한 규모의 정보 수집, 분석 능력이 있는 한 회사의 대표이사가 이야기했을 정도면 얼마나 답답했을까! 모든 기술에는 기반이 필요한 법이고, 그 기반은 결국 누군가가 다져놓지 않으면 기술은 성립되지 않는다. 뭐, 이 기술이 중요하고 어떤 기술..
Selenium 크롤링을 해보며 느낀 점 Selenium의 장점 실제 브라우저를 실행 시켜서 돌아가기 때문에, 웹페이지에 구현된 정적인 페이지뿐만 아니라, 동적인 페이지까지 긁어낼 수 있다. 그래서 느리다. 디버깅 시, 브라우저에서 눈으로 확인하기 때문에 크롤링 과정을 확인할 수 있다. 유용한 메소드들이 많다. Selenium의 단점 느리다. 너무 느리다. 진짜로 느리다. 만약 자신의 컴퓨터 성능이 그리 좋지 못하다면, Selenium 크롤링 테스트를 하면서 화딱지가 날지도 모른다. 실제 브라우저를 가동하다보니 그만큼 리소스를 잡아먹고, 에디터 리소스와 이것저것 생각하다보면 자연스럽게 import requests 라며 코드를 바꾸고 있을지도 모른다. 앞으로 크롤링은 이렇게 Only Selenium은 확실히 아니다. 분명히 아니다. request..
Crawler (Bot) Detection Avoid / 크롤러 탐지 우회 + 2021-04-08 수정 지금은 당시 글 썼을 때와 좀 생각이 달라졌습니다.. 😅 당시에는 개인 서버라고는 운영해본 적도 없는 대학생이어서 크롤링이 안되면 되게 하는 방법으로 고민했는데, 하지말라는 것에는 다 이유가 있기 마련이네요.. 이제는 회사에서 서버를 담당하고 있는 입장에서 크롤링 시도들이 달갑게 느껴지지는 않기 때문에.. 차단을 우회하면서까지 하는 건 분명 문제가 있어보입니다. 당시에는 그런 고려조차 안했었네요. 글을 삭제하지는 않고 서두에 수정내용만 달아놓겠습니다 🙇‍♂️ 피드백주신 분 감사드립니다 🙇‍♂️ 긁어오기 처음 크롤러를 만들면서 생각한 건 오로지 성능이었다... 지난 포스팅들도 보면 그렇고 "Selenium은 상당히 느려서 어떻게하면 성능을 끌어올릴 수 있을까"가 초점이었는데, ..
Bot Detection / 크롤러 차단 / 크롤러 우회 #4 (END) 지난번 포스팅은.. 지난번에 포스팅을 급하게 핸드폰으로 했더니 내용도 너무 적고 블로그에서 보니 폰트와 글씨 크기며.. 총체적 난국이었다. 뭐 간편하게 글을 쓸 수 있는 것은 좋긴 한데, 앞으로 핸드폰으로 글을 포스팅할 일은 거의 없지 않을까.. ActionChain 2 어쨌든 원래 크롤링 코드에 ActionChain을 적용해봤는데, 결과적으로는 잘 작동했다. 하지만, 시행착오는 언제나 존재하는 법. 그 삽질들을 조금 기록해보고자 티스토리를 열었다. 1. StaleElementReferenceException 이름부터 번지르르한 이 친구는 비교적 해결하기 쉬웠다. StaleElementReferenceException (이하 Stale) 은 Web Element에 접근할 때, DOM에 해당 Element..
Bot Detection / 크롤러 차단 / 크롤러 우회 #3 ActionChain 지난번에 분명 이어지는 포스팅에서는 header를 조작하는 내용에 대해서 다루겠다고 했는데... 원래 시작한 내용으로부터 너무 산으로 갈 것 같아서 안되겠다. 아예 차단 우회를 포기한 것은 아니고, 찾아보니 Webdriver에 ActionChain 이라는게 존재하는데 자세한 원리는 아직 파악 못했지만 사람이 마우스 등 으로 조작하듯이 특정 태그로 포커스나 마우스를 이동하고 클릭 등의 명령을 일종의 Chain형태로 수행할 수 있는 메소드 인듯 하다. ToDo 다만 내가 구현한 크롤러는 속도만 고려했기에 링크만 파싱해서 driver로 웹페이지를 탐색하는 방식인데, Actionchain을 사용하려면 어느정도 속도 저하는 감안하지만 사람과 유사하게 브라우징 한다는 점에서 차단을 우회할 수 ..
Bot Detection / 크롤러 차단 / 크롤러 우회 #2 디버깅의 필요성2 계속 차단되는 포인트가 뭘까.. 여러가지 시도를 해봤다. 일단 구글링과 StackOverflow를 뒤져가면서 알아낸 사실은 1. Selenium Webdriver의 Preference는 Runtime 중에 (Webdriver가 Instance로 만들어진 상태)는 변경할 수 없다. 2. Proxy IP 또한 마찬가지로 바꿀 수 없다. Firefox의 경우 webdriver에서 about:config로 접속해서 바꿀 순 있긴 하지만, 영 찜찜.. 1번의 경우는 header의 User-Agent 필드 값을 사전에 List로 정의해서 연결할 때마다 다른 User-Agent를 갖도록 위장하기 위해서 시도했었는데, Selenium을 사용하는 경우 불가능하다고 한다. 2번의 경우도 마찬가지, 크롤링..
Bot Detection / 크롤러 차단 / 크롤러 우회 #1 에이, 너가 그런거 아니지? 그냥 좋은 로직으로 크롤링만 하면 만사인줄 알았는데, 고비가 하나 더 있었다. CLI 환경에서 죽어라 크롤러를 돌리는데 자꾸 이상한 타이밍에서 Response를 못받아오거나, Connection Refuse가 발생해서 크롤러가 죽는 경우가 있었다. 내가 웹사이트 구조를 잘 이해하지 못해서 어디선가 Exception이 발생하는 건가.. 했지만, try / catch로 잡아보려고 해도 Exception은 발생하지 않았다. URL 문제인가? 라고 생각하면서 주소창에 여러가지 주소를 빠르게 넣어보며 웹페이지를 돌아 다니던 중, 갑자기 리다이렉션된 페이지. 정말 흠칫했는데 동시에 아차 싶었다. 지금까지 연습해온 크롤링은 정말 소규모에 불과했고, ..