Thanks to visit codestin.com
Credit goes to opentutorials.org

데이터 스크랩(Data scraping)

HTML파일 추출하기 (1차 추출, scrape 명령어)

웹페이지를 저장했으면 페이지를 열어서, 브라우저의 "요소검사" 기능을 통해서 해당정보가 담긴 테이블이나 div 태그등을 찾아야 합니다. 약간의 시행착오가 필요합니다.

프로젝트오일러 웹페이지( https://projecteuler.net/archives )에는 <table id="problems_table" class="grid"> 라는 태그 아래에 추출하고자 하는 정보가 모여있습니다.  그래서 scrape 라는 명령어로 이 태그부분만 추출할수 있습니다.

< test.html scrape -be 'table#problems_table'

 css의 id값이 'problems_table' 인 table 태그부분만 가져오라는 명령입니다. 만약 class 값으로 주어졌다면, table.problems_table 으로 점(.)으로 구분해주면 됩니다. (출력내용이 길면, 마찬가지로 head 명령으로 적당히 잘라주면 됩니다.)

또는 하위태그인 tr태그까지 지정해줄수 있습니다.

< test.html scrape -be 'table#problems_table > tr:not(:first-child)'

tr태그를 가져오되, 이 페이지의 경우 첫줄이 제목을 표시하는 줄이기 때문에, 첫번째 줄은 제외하고 가져오라는 명령입니다. 세밀하게 지정해줄수록 이후의 작업이 편하긴 합니다.

< test.html scrape -be 'table#problems_table > tr:not(:first-child)' > test_table.html

이 역시 결과를 파일로 저장해줄수 있습니다. test_table.html 으로 저장해주겠습니다.

 

JSON 파일로 변환하기

2차 추출작업은 json 이라는 파일에서 이루어집니다. 이를 위해서 html 파일을 json파일로 변환해줘야 합니다.

< test_table.html xml2json > test_table.json

또는 앞의 명령에 붙여서 한꺼번에 실행해도 됩니다.

< test.html scrape -be 'table#problems_table > tr:not(:first-child)' | xml2json > test_table.json

2개이상의 명령어가 연결됐기 때문에 명령어 사이에 파이프( | ) 를 넣어줘야 합니다.

라인이 길때는 역슬래쉬를 넣고, 다음줄에 이어서 명령어를 작성하면 됩니다.

< test.html scrape -be 'table#problems_table > tr:not(:first-child)' \
| xml2json > test_table.json

 

댓글

댓글 본문
버전 관리
nomadlife
현재 버전
선택 버전
graphittie 자세히 보기