- 전체
- Python 일반
- Python 수학
- Python 그래픽
- Python 자료구조
- Python 인공지능
- Python 인터넷
- Python SAGE
- wxPython
- TkInter
- iPython
- wxPython
- pyQT
- Jython
- django
- flask
- blender python scripting
- python for minecraft
- Python 데이터 분석
- Python RPA
- cython
- PyCharm
- pySide
- kivy (python)
Python 인터넷 증권뉴스 데이터 수집(1/3)
2018.02.18 23:15
증권뉴스 데이터 수집(1/3)
1. 웹 크롤링
웹 스크레이퍼는 하나의 웹페이지 데이터를 긁어오는 것이었습니다. 크롤링은 첫 접근 웹페이지서 다른 문서로의 링크를 따라 이동하는 기능이 반드시 필요합니다. 비교적 간단한 웹 사이트의 경우에는 크롤러가 읽은 HTML 문서를 분석하여 링크들을 추출하고 그 링크를 따라가기도 합니다. 구조가 복잡하거나 동적으로 콘텐츠가 생성되는 웹 사이트의 경우에는 헤드레스(메모리 상에서만 동작하는 브라우저), 혹은 실제 웹 브라우저를 크롤러를 통해 구동해야 하기도 합니다. 이런 웹사이트의 수집 절차는 일반화하기 어려운 경우가 대부분입니다.
다양한 정보제공을 위한 API 형태의 웹 서비스를 제공하는 사이트의 경우에는 API를 사용하는 것이 바람직합니다. 트위터, 금감원, 한국은행 등에서는 API 서비스를 제공합니다.
1.1 웹 크롤링 절차
웹 크롤링은 대체로 다음의 순서로 진행합니다.
1) 문서 URL의 수집과 저장 : 웹 문서를 가리키는 URL을 수집하여 저장하는 것입니다.
2) 위의 단계에서 수집한 URL들을 읽어서 문서를 수집하여 저장합니다.
3) 웹 문서는 HTML 형식의 문서입니다. 자바스크립트 등 순수 텍스트가 아닌 요소를 잘라냅니다.
주의사항
웹 크롤링은 타인 혹은 타조직이 생성한 콘텐츠에 일반적이지 않은 방법으로 접근하는 일입니다. 현실적으로 인간 사용자가 아닌 크롤러의 접근을 좋아할 웹 사이트는 없습니다. 그러므로 서비스 이용약관, 저작권 보호, 개인정보 보호등을 면밀하게 감안해서 이용해야 합니다. 크롤링에 의한 웹 자원으로의 접근은 웹사이트에 의도하지 않은 영향을 끼칠 가능성이 있습니다. 그러므로 시간 간격 등 조정 가능한 모든 요소를 면밀히 조정하여 웹 사이트가 정상 상태로 운영되도록 해야 합니다.
2. 뉴스 크롤링
네이버 뉴스 사이트를 예로 들어 웹사이트의 분석에서 크롤러에 이르기 까지의 과정을 살펴보겠습니다.
2.1 권한파악
우선 하기전에 웹사이트에 접근하는 크롤러의 접근 범위를 규정하는 robots.txt의 내용을 검토해 보겠습니다. 네이버 뉴스의 경우에는 http://news.naver.com/robots.txt에 해당 파일이 존재 합니다.
User-agent: Yeti
Allow: /main/imagemontage
Disallow: /
User-agent: *
Disallow: /
네이버 뉴스 사이트의 개별 뉴스 문서에 접근이 허용되는 로봇은 imagemontage 이 유일합니다. 나머지 로봇들은 최상위 디렉토리로 부터 시작하여 그 하위의 어느 디렉토리에 있는 문서에도 접근이 허용되지 않습니다. 그러나 위의 사항은 강제사항이 아닙니다. 확실한 것은 이 사이트를 크롤링 하기 위해서는 사용자가 로봇이 아닌 실제 브라우저라고 우회해야 한다는 것입니다.
2.2 사이트분석
경제면 인덱스 페이지에 헤더 부분을 보면 "금융", "증권", "부동산" 등의 하위 분류가 되어 있습니다. 여기서는 "증권" 링크를 눌러보겠습니다.
경제면 증권 뉴스 인덱스 페이지의 URL" http://news.naver.com/main/list.nhn?mode=LS2D&mid=shm&sid1=101&sid2=258"이 웹브라우저의 주소창에 명시적으로 표시됩니다.
다음 단계에서는 날짜 선택과 페이지 적용이 반영된 인덱스 페이지로의 접근 방법을 찾아 보겠습니다. 앞서 접근한 최신 뉴스 인덱스 페이지의 아랫쪽으로 이동하면 접근 당일을 기준으로 과거 일주일간의 날짜 기사 인덱스 페이지로의 링크와 다른 페이지로의 이동 링크가 있습니다. 그럼의 예는 2017년 4월 25일 링크를 누르고 3페이지로 이동해 보겠습니다.
앞서와 마찬가지로 웹 브라우저의 주소창에 날짜와 페이징이 반영된 인덱스 페이지의 url "http://news.naver.com/main/list.nhn?sid2=258&sid1=101&mid=shm&mode=LS2D&date=20170425&page=3"
이 표시됩니다. 이 URL을 만드는 규칙은 어렵지 않습니다. sid1 이 101이면 경제기사가 sid2가 258이면 증권입니다. 날짜는 date인자에 YYYYMMDD 형식으로 넣고 페이지 번호도 넣으면 됩니다.
2.3 HTML 패턴 파악
웹 브라우저를 이용해 인덱스 페이지의 소스를 보겠습니다. 이 단계에서 할 일은 인덱스 페이지의 소스에서 개별 기사로의 링크들을 추출하는 것입니다. 한마디로 이 HTML에 존재한는 기사관련 URL을 모두 수집하는 것이죠.
소스를 잘 살펴보면
<a href="http://news.naver.com/main/read.nhn?mode=LS2D&mid=shm&sid1=101&sid2=258&oid=015&aid=0003760902"> 와 같은 형식으로 개별 기사 링크가 표시되어 있습니다. 모두 <a> 태그의 href 속성으로 되어있으므로 이를 이용하여 기사 URL을 골라낼 수 있습니다.
위 링크를 눌러보시면 다음과 같은 기사가 뜹니다.
여기에는 http://news.naver.com/main/read.nhn?mode=LS2D&mid=shm&sid1=101&sid2=258&oid=015&aid=0003760902
같은 형태의 인쇄용 기사의 url이 나타나 있습니다. 핵심은 aid 인자에 전달되는 기사 번호입니다. 이 번호는 인덱스 페이지에서 수집하는 기사 URL에서 추출이 가능합니다.
3. 실습
초보자들이 순서대로 따라갈 수 있게 짰지만, 실제는 이렇게 짜면 안됩니다. 구조화를 잘 해서 기능별 Function을 나눠서 해야하죠. 각자 모듈화를 잘 하시기 바랍니다.
결과를 보시면
잘 수집이 되었습니다.
다음편에는 수집한 기사에서 텍스트를 추출하는 방법을 알려드리겠습니다.
[출처] 증권뉴스 데이터 수집(1/3)|작성자 엉드루
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 5 |
파이선 애드온을 이용한 블랜더 2.6 : Creating a Blender 2.6 Python add-on
| 졸리운_곰 | 2017.08.15 | 483 |
| 4 | blender import/export script | 졸리운_곰 | 2017.08.13 | 1594 |
| 3 | blender python 퀵스타드 매뉴얼 : blender python quick start | 졸리운_곰 | 2017.08.13 | 1394 |
| 2 |
블랜더 파이썬 애드온 개발 : blender python addon dev
| 졸리운_곰 | 2017.08.13 | 3386 |
| 1 |
Python Scripting for the Blender Game Engine
| 졸리운_곰 | 2017.08.13 | 736 |

