Crawling

Crawling

[크롤링/16]메시지 큐(파이썬 Redis)

- 크롤링과 스크레이핑을 분리해서 비동기적으로 처리하자 우선 크롤링과 스크레이핑은 다르다. 크롤링은 HTML/파일 등을 추출하고 저장하는 것이고, 스크레이핑은 그 결과물인 HTML에서 원하는 데이터를 추출하는 것이다. 그리고 일반적으로 크롤링보다 스크레이핑에서 문제가 더 많이 생긴다. 실제로 회사에서 크롤러를 관리할 때도 크롤링에 실패한 경우 원인을 파악해보면 십중팔구 스크레이핑이 문제였다. 크롤링은 HTML을 긁어오기만 하면 된다. 그 HTML에서 키워드 등 원하는 데이터의 유무를 판단하는 건 스크레이핑의 영역이다. HTML을 긁어오는데서 실패를 할 가능성은 웹 서버 에러를 제외하고는 거의 없지만, 스크레이핑은 데이터의 위치가 바뀌었다던지, 데이터가 더이상 포함되어있지않다던지 다양한 실패 가능성이 있다..

Crawling

[크롤링/15] 크롤러 서버에서 운용하기(Windows/Ubuntu)

주기적으로 크롤러를 자동 실행하여 최신 데이터를 수집해야 하는 경우 다양한 옵션을 생각해볼 수 있다. 클라이언트에서 크롤러를 스케줄러에 등록해서 운용할 수도 있지만, 굳이 서버라고 명시한 것은 여러 가지 이유가 있다. 크롤러가 스케줄에 따라 동작하려면, 스케줄된 시간에 머신이 동작하고 있어야 하며 크롤러가 동작하는 도중에 머신이 종료되면 안 된다.기본적으로 서버는 24시간 돌아간다. 따라서 스케줄 된 시간의 머신 동작 여부나 동작 종료 여부를 걱정하지 않아도 된다. 예전에 회사에서 크롤러를 관리할 때, 서버용으로 사용하는 컴퓨터가 있었는데 회사 전기가 나가서 크롤러가 동작하지 않은 적이 있다. 이런 경우를 생각하면 클라우드 서비스도 좋은 선택지인 것 같다. 1. 윈도우즈 서버에서 크롤러 운용하기 작업 스..

Crawling

[크롤링/14]Scrapy로 Javascript 사용한 페이지 크롤링하기(Splash)

github.com/scrapy-plugins/scrapy-splash scrapy-plugins/scrapy-splash Scrapy+Splash for JavaScript integration. Contribute to scrapy-plugins/scrapy-splash development by creating an account on GitHub. github.com Scrapy는 lxml을 기반으로 만들어져 있어서 자바스크립트를 읽고 실행하지 못한다. 따라서 자바스크립트를 처리하기 위해 Selenium과 PhantomJS를 주로 사용하는데, Scrapy에서도 Splash를 사용하면 자바스크립트를 처리할 수 있다. Splash는 웹킷을 기반으로 만들들어진 헤드리스 브라우저를 사용한 서버다. Spl..

Crawling

[크롤링/13]Scrapy 오류 처리 설정

RETRY_ENABLED(기본값 True) 타임아웃 또는 HTTP 상태 코드 500 등이 발생했을 때d 자동으로 재시도할지 여부 이 설정과 관계 없이 Request.meta 속성으로 dont_rety 키 값을 True로 지정하면 해당 요청은 재시도하지 않는다. yield scrapy.Requests(url, meta={'dont_retry': True}) 잘못된 응답 또는 데이터 손실 오류는 서버 구성 오류에서 네트워크 오류, 데이터 손상에 이르기까지 여러 상황에서 발생할 수 있다. 깨진 응답이 부분적이거나 불완전한 내용을 포함 할 수 있다는 점을 고려하여 깨진 응답을 처리하는 것이 합리적 일지 결정하는 것은 사용자의 몫이다. RETRY_TIMES(기본값 2) 재시도 최대 횟수 재시도 횟수가 2라는건 처..

Crawling

[크롤링/12]Scrapy HTTP 요청/캐시 설정

캐시 설정은 같은 요청을 반복할 때 상대 서버에 가는 부하를 줄일 수 있다. HTTP 캐시 설정을 활성화하면 첫 요청을 제외하고는 대상 서버가 아닌 저장된 캐시를 활용하게 된다. 또한 응답을 캐시에서 받으면 요청 사이에 대기 시간이 들어가지 않으므로 빠른 처리가 가능하다. 1. HTTP 요청 USER_AGENT(기본값 "Scrapy/VERSION (+https://scrapy.org)") 공식 문서: docs.scrapy.org/en/latest/topics/settings.html?highlight=user_agent#user-agent Settings — Scrapy 2.4.1 documentation Here’s a list of all available Scrapy settings, in alph..

Crawling

[크롤링/11]Scrapy 병렬 처리 설정

특정한 웹 사이트를 크롤링할 때 병렬 처리를 하는 것은 민폐다. 하지만 불특정 다수의 웹 사이트를 크롤링할 때는 병렬처리로 크롤링 시간을 단축할 수 있다. Scrapy의 기본 설정은 특정 웹 사이트를 크롤링하는 것에 맞춰져있다. 즉, 불특정 다수의 웹 사이트를 크롤링 하기에는 잘 맞지않다. 하지만 Scrapy는 비동기 아키텍처로 인해 빠른 broad crawling 광범위 크롤링에 좋은 성능을 보여준다. Priority Queue 사용 중지하기 SCHEDULER_PRIORITY_QUEUE = 'scrapy.pqueues.DownloaderAwarePriorityQueue' Priority Queue는 싱글 도메인 크롤링에 적합하다. CONCURRENT_REQUESTS(기본값 16) CONCURRENT_R..

Crawling

[크롤링/10]Scrapy로 크롤링 대상 사이트에 피해주지 않는 설정하기

크롤러를 만들때 중요한건 크롤링 대상 사이트에 피해를 주지않는 것이다. 크롤러는 크롤링 할 사이트가 있어야만 존재할 수 있다. 그러므로 크롤링 대상에 피해를 주지 않기위한 Scrapy 설정들(클릭하면 공식 문서로 이동) Settings — Scrapy 2.4.1 documentation Here’s a list of all available Scrapy settings, in alphabetical order, along with their default values and the scope where they apply. The scope, where available, shows where the setting is being used, if it’s tied to any particular comp..

Crawling

[크롤링/09]크롤러 분류

1. 상태 유무 상태를 가지는 크롤러 - Stateful 상태가 없는 크롤러 - Stateless 상태를 가지는 크롤러의 경우에는 쿠키 송수신 기능이 필요하다(Requests Session, Referer). 2. 자바스크립트 실행 유무 자바스크립트를 실행하는 경우에는 Selenium을 사용하거나, 패턴을 파악해 흉내 내는 방법이 있다. 브라우저 조작 도구인 셀레니움은 일반적인 크롤러에비해 실행 시간이 길고 메모리 소비량이 많다. 따라서 어쩔 수 없는 경우에는 이를 사용해야겠지만, 최대한 피하는 편이 좋다. 헤드리스 브라우저는 일반 웹 브라우저에 비해 메모리 소비량이 적기때문에, 셀레니움을 사용할 때는 헤드리스 브라우저를 사용하는 것이 좋다. 대표적인 헤드리스 브라우저로는 PhantomJS가 있다. 3...

Crawling

[크롤링/08]퍼머링크와 데이터베이스 설계

퍼머링크(Permalink = Permanent + Link)란? 하나의 콘텐츠에 대응되며, 시간이 지나도 대응되는 콘텐츠가 변하지 않는 URL 인터넷에서 특정 페이지에 영구적으로 할당된 URL 주소를 뜻한다. 이 주소는 한 번 정해지면 영원하다는 의미에서, 영구적인(permanent) 주소라는 뜻의 permanent link를 줄여 만든 말이다. - Wiki(https://ko.wikipedia.org/wiki/퍼머링크) 퍼머링크의 장점 검색 엔진의 크롤러가 콘텐츠를 인식하기 쉬움 검색 엔진 최적화가 잘 이루어짐 크롤러의 재실행 크롤러는 보통 반복적인 작업을 위해 만들어지고, 일회성 사용에서 그치는 경우가 적다. 따라서 크롤링한 데이터를 데이터베이스에 저장할 때는 유니크 키를 생각해야한다. 단순하게 저..

Crawling

[크롤링/07] 알고 있으면 유용한 조각 지식-01

1. 표준 스트림과 리다이렉트 2. 파이프 3. 웹 페이지 추출 4. 문자코드 인코딩 방식(문자 코드) 정하는 방법 HTTP 헤더에서 추출 meta 태그에서 추출 5. 웹 페이지에서 데이터 추출 정규 표현식 HTML을 단순한 문자열로 취급 XML 파서 XML 태그를 분석하고, 필요한 부분을 추출 RSS처럼 많은 정보가 XML로 제공되기 떄문에 XML파서를 사용하면 편리 from xml.etree import ElementTree 6. SQLite 파일 기반의 관계형 데이터베이스 파일 쓰는데 걸리는 시간이 김 대용량의 데이터를 계속해서 쓰면 크롤러의 병목지점이 될 것 동시 처리 불가 7. Session 여러개의 페이지를 연속으로 크롤링할 때 사용하면 효율적 HTTP 헤더 또는 Basic 인증 설정을 재사용..

Crawling

[크롤링/06] 인증이 필요한 페이지

🚫인증이 필요한 페이지 웹 애플리케이션의 관리 기능이나 개인 정보를 다루는 경우가 대부분 공개하면 안되는 페이지를 포함한 경우 원칙적으로는 접근하면 안됨 그러나 필요한 경우가 있음 뱅크샐러드와 같이 은행과 증권 등 보유하고 있는 금융 계좌를 한 번에 관리하는 서비스 자산 총액 확인을 하기위해 은행을 각기 확인하는 것은 번거로움 이를 크롤러가 한꺼번에 수집해줌 분산형 미디어 직접 미디어 시스템을 가지지 않고 Facebook, Twitter, Instagram 등의 소셜 미디어 등의 미디어에 콘텐츠를 제공하는 것 동일한 콘텐츠를 페이스북, 트위터 등의 SNS에 올려야 하는 경우에 주로 운용 딩고 미리 SNS에 접근할 권한을 확보 한 후 한번에 모든 SNS에 미디어를 업로드하고 사용자의 반응을 추출한 뒤 시각..

Crawling

[크롤링/05]효율적인 크롤링 하는 방법

Q. 효율적인 크롤링이란? A. 크롤러를 운용하는 서버의 리소스를 효율적으로 활용하는 정도 웹 사이트의 변경 시점이나 변경 빈도 학습 정기적으로 크롤링을 하면 대상 사이트의 경향을 알 수 있음 예 1> 매주 화요일에 자료가 업데이트 된다. 5시부터 10시까지는 접속이 지연된다. → 매주 화요일 10시 30분에 크롤링 예 2> 매일 자료가 업데이트 된다고 공지가 올라와있다. 9시부터 20시까지는 트래픽이 높다. → 8시 30분 또는 20시 30분에 크롤링을 하는 등 트래픽이 높은 시간을 피해서 크롤링 예 3> 매주 수요일 9시마다 오류가 발생한다. → 해당 요일, 시간을 피해서 크롤링 크롤링에 필요한 시간은 웹 사이트에 따라 다름 웹 사이트 내부의 페이지가 같아도 응답 간격과 응답 속도의 차이가 존재 크롤..

박한결
'Crawling' 카테고리의 글 목록