본문 바로가기

프로그래밍

(20)
크롤러 마음놓고 돌리기 - Scrapinghub Scrapinghub와 관련해서 궁금한 점이 있으시거나 잘못된 정보가 있다면, 댓글로 알려주시면 감사드리겠습니다! 방학동안에 열심히 크롤링을 하고, 블로그 포스팅도하고, 인턴에 지원했는데 합격했다(?). 그래서 약 5개월 간 포스팅이 없다시피 했다. 중간에 갑자기 데이터베이스 관련 포스팅을 올린 건 일하면서 필요해서 올렸고, 사실 상 포스팅이라고 하기에도 분량이 너무 귀엽고 소중했다. 어쨌든, 오늘 다뤄볼 주제는 Scrapinghub라는 서비스에대한 소개로 해볼까한다. 이 글의 카테고리가 "크롤링" 이고, 제목으로 어느정도 유추할 수 있을 듯하다. [광고같은건 아니다..] Scrapinghub는 클라우드 기반으로 크롤링을 비롯한 다양한 기능을 제공하는 웹사이트다. 유저가 크롤러 코드를 작성해서 클라우드에..
Team formation / 코딩테스트 문제 난이도 : Medium 특징 : Priority Queue 요구사항 입출력 예시 Hackerrank invitation으로 온 문제라서.. 문제에대한 링크를 걸 수가 없다. Sample Input 1 1. 첫 번째 줄에는 배열의 크기 값 2. 두 번째 줄 이후는 배열의 각 요소이다. 3. 마지막에서 2번째 줄은 만들어야하는 팀원의 수 4. 마지막 줄은 Manager가 팀원을 뽑기 위해서 배열에서 선택하는 그룹의 크기를 의미한다. 단순히 구현으로만 생각하면 생성하는 그룹마다, python의 max 내장 함수로 처리하면 되겠지만 어느정도 입력이 커지면 Timeout이 나버린다. 개인적으로 2가지 성능에 큰 영향을 미치는 부분은 1. Manager가 선택한 그룹에서 최댓값을 찾는 코드 2. 선택한 두 가지 그..
Regular Expression / Regex / 정규표현식 정규표현식을 단계적으로 학습하기 매우 좋은 사이트 https://regexone.com/lesson/introduction_abcs RegexOne - Learn Regular Expressions - Lesson 1: An Introduction, and the ABCs Regular expressions are extremely useful in extracting information from text such as code, log files, spreadsheets, or even documents. And while there is a lot of theory behind formal languages, the following lessons and examples will explore th..
더 우아한 크롤러를 위해 / 분산 크롤러 / 크롤러 아키텍쳐 본 게시물은 다양한 외부 소스들을 종합해서 정리하고 기록하기 위한 글입니다. 일부분 필자의 의견이 섞여있으므로 정확한 내용을 알고싶으시다면 하단의 출처를 참고해주세요. 크롤러? 뭐 더 공부할게 있나.. 내가 크롤러에 관심을 갖게 된 후, 주변에서의 크롤링 기술에 대한 인식이 영 긍정적이지만은 않다는 것을 안 것은 불과 몇 주전 이었다. 대기업들한테 가서 크롤링 이야기하면 그래요, "크롤러? 그거 쉬운걸 뭐 굳이.." - 기업초청 세미나에서 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을 사용하려면 어느정도 속도 저하는 감안하지만 사람과 유사하게 브라우징 한다는 점에서 차단을 우회할 수 ..