본문 바로가기

프로그래밍

(20)
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 문제인가? 라고 생각하면서 주소창에 여러가지 주소를 빠르게 넣어보며 웹페이지를 돌아 다니던 중, 갑자기 리다이렉션된 페이지. 정말 흠칫했는데 동시에 아차 싶었다. 지금까지 연습해온 크롤링은 정말 소규모에 불과했고, ..
[190125] performance in selenium / 셀레니움에서 성능 향상과 관련하여 Selenium BeautifulSoup은 웹페이지가 로딩된 후 동적으로 불러들여지는 요소 (javascipt)에 대해서는 적절하게 대응을 할 수 없는 것 같다. 자바스크립트가 없는 페이지는 없으며, (내가 스크래이핑을 원하는 웹페이지 중에는) 결국 이에 대응할 수 있는 Selenium은 불가피했다. 뭔가 지금까지 코딩을 해오면서의 감으로 인한 것일까, Selenium의 속도부터 걱정됐다. 어쨌든 깔아서 코드에 적용해봤고, 역시나 느렸다. 너무 많이... Selenium Browser 언제나 그렇듯 우리의 선배 개발자분들 께서 다져놓은 길이 있다. Selenium또한 성능향상을 꾀할 수 있다는 것. 일단 기본적으로 Selenium은 브라우저가 필요하다. Chrome, Firefox 등 코드가 실행되는 과..
[190119] requests In Python BeautifulSoup를 이용해서 원하는 데이터를 긁어올 수 있는 것은 참 멋진데, 보통 내가 원하는 양질의 데이터들은 단순히 HTML에 툭툭 나열되어있는 것이 아니라, 특정 카테고리를 선택해야 한다던가, 특정 키워드를 검색해서 양질의 데이터를 제공한다. 그 말인 즉, 스크래이퍼가 마치 사람인양 요청을 해야한다는 것이다. 예를 들어서, 주택청약정보를 담고있는 아파트투유 홈페이지 ("https://www.apt2you.com/") 에는 보통 사람들이 많이 관심을 갖는 주택분양 경쟁률이나 결과가 업로드된다. 여러가지 필터링을 통해서 원하는 지역의 주택을 검색하고 해당 주택의 청약 경쟁률이나 공급현황, 이미 공고가 끝났다면 평균 가점, 최저/고 가점 등을 참고할 수 있다. 한마디로, 원하는 지역의 정보를 스..
[190116] pytrend Google trend 서비스는 다양한 필터와 부가기능을 제공하는데.. Google 측에서 공식적인 API는 제공하고 있지 않다. 하지만 이런 귀중한 데이터를 가만히 놔둘리 없는 개발자 분들이 다행히도 비공식 API를 개발해서 Github에서 제공중이다. # Github git clone https://github.com/GeneralMills/pytrends # 기능 Top Chart나 Trending Search 등 다양한 기능이 있지만, 현재로서는 기본적인 기능만 사용할 것 같다. Interest_over_time : 시간에 따른 검색 키워드의 검색량을 보여준다. 물론, 시간설정도 가능하다. 결과가 pandas로 제공되므로 pandas의 대략적인 Dataframe을 알고 있으면 유용하다 - http..
[180508] Fast Change Directory [180508] Fast Change Directory
[151101] Raw Socket [151101] Raw Socket 오늘은 Raw Socket에 대해서 알아보려고 한다. Socket 이 편지 봉투에 "우표"와 "주소"만 붙여서 보내는 방식이었다고 한다면, Raw Socket 은 편지지부터 시작해서 글자 수, 언어, 주소 등을 포함한 사사로운 모든 요소들을 직접 설정해서 보내는 방식이라고 할 수 있다. 따로 서버를 구축하거나, 다른 컴퓨터가 없어서 송/수신을 테스트하기 어려워 "루프백 아이피"와 "와이어샤크" 를 사용해서, 정말 내가 설정한 값들로 Packet 이 도착하는지 확인해볼 것이다. 흔히 일어나는 통신 방식 중 하나인 TCP/IP 를 이용할건데, 직접 TCP/IP Header Socket 을 만들어 테스트할 것이다. 1. 구조체 및 각 종 변수 선언 unsigned char ..
[151025] 리눅스 디스크립터 [151025] 리눅스 디스크립터 (Descriptor) 드디어 시험이 끝났다. 매일 같이 블로그에 포스팅 하시는 분들 보면 정말 대단하다는 생각이 든다. (..) 지난 번 포스팅에서 서버와 클라이언트를 구현해서 대화하는 프로그램을 포스팅 했는데, 잘 모르는 상태에서 검색을 하고 프로그램을 짜다보니 그저 소스 코드 옮겨 쓰기라는 느낌이 강하게 들었다. 사실상 지금 머리에 많이 남아있는 것도 없는 것 같다. 그래서, 한 번에 큰 프로그램 보다는 코드를 분할하여, 각 기능 별로 구분해서 포스팅 할 예정이다. 오늘은 " 파일 디스크립터 "와 " 소켓 " 이 주 개념으로 자리 잡을 것이다. #include #include #include #include #include #include #define PORT 8..