갈루아의 반서재

https://www.pexels.com/photo/abstract-close-up-cobweb-connection-276502/

여기서는 Web Scraper 이라는 프로그램을 이용하여 사이트를 스크랩하는 방법에 대해 알아본다. 

Installation 

크롬 사용자의 경우 chrome 웹스토어에서 확장프로그램 형식으로 Chrome에 추가 버튼만 눌러서 간단히 설치할 수 있다.

Scraping a site

사이트맵 생성 Create Sitemap

먼저 스크랩하고자하는 사이트를 연다. 그리고 가장 먼저 해야하는 것은 시작 url 을 특정하는 사이트맵을 만드는 것이다. 물론 여러개의 시작 url 을 지정할 수도 있다. 예를 들어 다수의 검색 결과를 스크랩하는 경우가 이에 해당한다. 

범위를 활용한 멀티플 url 지정 Specify multiple urls with ranges

페이지 URL 에서 넘버링을 하고 있는 경우에는 링크 선택자보다는 숫자의 범위를 활용하는 것이 효율적이다. 범위 url 을 지정하기 위해서는 시작 url 의 넘버 파트를 [1-100] 과 같은 범위 정의를 이용하면 된다. 만약 해당 사이트가 제로 패딩 (zero padding) 을 사용하는 경우 범위 정의에 제로 패딩을 [001-100]와 같이 추가한다. 그리고 일부 url 을 건너뛰고 싶다면  [0-100:10] 와 같이 증분(incremental)을 지정하면된다.

예를 들어, http://example.com/page/[1-3] 에는 다음의 3개 링크가 포함되어 있는 것이다.

http://example.com/page/1
http://example.com/page/2
http://example.com/page/3

제로 패딩을 사용한 다음 시작 url http://example.com/page/[001-100] 에는 다음의 링크가 포함되어 있다.

http://example.com/page/001
http://example.com/page/002
http://example.com/page/003

증감 단위를 지정한 다음 시작 url http://example.com/page/[0-100:10] 에는 아래의 링크가 포함되게 된다.

http://example.com/page/0
http://example.com/page/10
http://example.com/page/20

선택자 생성 (Create selectors) 

사이트맵 생성이 끝나면 해당 사이트맵에 선택자를 추가할 수 있다. 선택자 패널에서 새로운 선택자를 추가하거나 기존의 선택자를 수정, 그리고 선택자 트리를 탐색할 수 있다. 선택자는 트리 형식 구조로 추가된다. 그리고 웹스크래퍼는 해당 트리 구조의 순서대로 실행된다. 예를 들어, 샘플 사이트가 뉴스 사이트이고, 첫 페이지에 있는 모든 링크의 기사를 스크랩하기를 원한다면 아래 그림의 구조와 같을 것이다.

[Source] https://www.webscraper.io/documentation/scraping-a-site

위의 사이트를 스크랩하기 위해서는 첫 페이지의 모든 기사 링크를 추출하는 링크 선택자를 생성해야 한다. 그리고  자식 선택자를 통해서 링크 선택자가 찾은 링크의 페이지에서 기사를 추출해내는 텍스트 선택자를 추가할 수 있다. 즉, 위 뉴스 사이트의 사이트맵은 아래 그림처럼 구성되어야 한다.

[Source] https://www.webscraper.io/documentation/scraping-a-site

 

선택한 데이터와 구성요소가 정확한지 검증하기 위해 선택자 생성시 Element preview 와 Data preview 기능을 사용하는 것이 좋다. 선택자 트리 생성과 관련한 추가적인 정보는 다음 링크에서 찾아볼 수 있다.

선택자 트리 검사 Inspect selector tree

선택자 그래프 패널에서 선택자의 트리 구조를 설펴볼 수 있다. 아래 이미지는 위의 샘플 뉴스 사이트의 선택자 그래프이다.

[Source] https://www.webscraper.io/documentation/scraping-a-site

 


사이트 스크랩 Scrape the site

사이트맵의 선택자 생성이 끝나면, 이제 스크랩을 시작할 수 있다. 스크랩 패널을 열고 스크랩을 시작해보자. 새창이 뜨면서 스크래퍼가 페이지를 로딩하고 데이터를 추출해낼 것이다. 스크랩이 끝나면 그 팝업 윈도우는 종료되고 스크랩이 끝났다는 메시지가 뜰 것이다. 브라우저 패널을 통해서 스크랩된 데이터를 볼 수 있고, Export data as CSV 패널을 통해 해당 데이터를 열어볼 수 있다.

 

실제로 스크랩을 해보자

위의 내용대로 실제 사이트를 대상으로 스크랩을 해보자. 여기서는 https://medium.com/incerto 페이지의 게시물을 스크랩해보기로 한다. 

F12 를 눌러 개발자 모드로 진입한다. 상단 메뉴 중 Web Scraper 을 누른다. Create new sitemap > Create Sitemap 을 눌러 아래와 같이 사이트맵 이름과 Start URL 입력하고, Create Sitemap 을 클릭하여 저장한다.

이제 선택자를 추가할 차례다. 아래 이미지에서 보듯이 클릭할 타이틀 링크 선택자에 대한 정보를 입력한다. id 에는 구분할 수 있는 내용으로 입력하고, Type 은 Link 를 선택한다. Selector 에서 Select 를 누르면 해당 요소를 선택할 수 있는 메뉴가 뜨는데, Enable key events 를 누르면, 아래와 같이  S P C 이상 3개의 키를 볼 수 있다. S = select element, P =  select parent, C = select child 를 의미한다. 

제목 근처에 마우스를 가져가면 녹색으로 바뀌는데, 여기서 S 키를 누르면 아래와 같이 붉은 색으로 바뀌는 것을 볼 수 있다. 이 상태에서 Done selecting! 을 클릭하면 된다. 

그리고 나서 Save selector 를 눌러서 저장한다. 

다음으로 게시물 중 하나를 클릭하여 게시물 내용으로 이동하여 본문 텍스트 선택자를 지정한다. 위와 마찬가지로, 적당한 id 를 입력하고, Type 은 Text 를 선택한다. 마찬가지로 Select 를 눌러서 선택할 준비를 한 다음, S 키를 눌러서 요소 선택을 마친다. 

다음과 같이 article_title 하위에 article_content 선택자가 저장되었음을 알 수 있다. 

우측 Actions 의 Element preview 와 Data preview 기능을 통해 제대로 선택이 되었는지 검증을 해보자. 

요소와 데이터 모두 제대로 지정했음을 알 수 있다.

스크랩을 하기 전에 마지막으로 Selector graph 를 통해 사이트맵의 구조를 살펴볼 수 있다. 본 예제는 워낙 단순하다보니 굳이 이를 통해 확인할 필요는 없을지 모르지만, 스크랩 내용이 복잡한 경우 이를 통해 시각적으로 확인하는 것도 필요하다. 

이제 스크랩을 진행해보자. 아래 메뉴에서 Scrape 를 누르고, Request interval 과 Page load delay 값을 셋팅한 다음 Start scraping 을 누른다. 

팝업이 뜨면서 스크랩을 하게되고, Refresh Data 를 해보면 아래와 같이 해당 게시물이 스크랩되었음을 알 수 있다. 그런데, 이걸로 끝이다. 해당 Start URL 에는 다수의 게시물이 존재함에도 1회의 스크랩으로 끝났다.

다시 article_title 선택자 편집 화면으로 들어가 Multiple 옵션을 yes 로 변경하여 다시 스크랩을 해보자. 

그러면 아래와 같이 해당 시작 페이지의 모든 게시물이 스크랩되었음을 알 수 있다. 

마지막으로 Export data as CSV 기능을 통해 csv 파일로 가져올 수도 있다.

 

 

참고링크 https://www.webscraper.io/documentation/scraping-a-site

 

Scraping a site | Web Scraper Documentation

Scraping a site Open the site that you want to scrape. Create Sitemap The first thing you need to do when creating a sitemap is specifying the start url. This is the url from which the scraping will start. You can also specify multiple start urls if the sc

www.webscraper.io