본문 바로가기

Theory/DataScience

웹에 있는 데이터를 가져와보자

데이터 사이언스 관련된 연재를 올리다가 제가 너무 바쁜 관계로 잠시 쉬었네요. 이제 다시 시작해야죠. 데이터를 다루는 것을 공부하다보면 어디서 데이터를 얻을 것인지에 대한 고민이 당연히 생깁니다. 대부분의 회사에서야 자기들만의 방법으로 데이터를 얻게 되죠. 그러나 웹에서 데이터를 얻는 방법을 알아두면 정말 재미있는 일을 많이 해볼수 있답니다.

일단, jupyter notebook에서 pip install bs4를 수행해서 Beautiful Soup이라는 것을 설치합니다. 이미 설치되어 있는 분들도 있겠지만, 우리가 처음 환경을 설치하던 글에서 시작하신 분들은 설치되어 있지 않을 겁니다.

그리고 세상에서 가장 간단한 사이트중 하나인 beans-r-us라는 사이트를 찾아 보겠습니다. 사실 이 사이트는 몇 개 이상입니다.^^

생긴 모양은 이렇습니다. 여기서 현재 커피가격인 6.62달러라는 정보를 가져오고 싶다면 홈페이지를 구성하는 HTML이라는 언어를 조금 알아야합니다. 그런데 그것까지 공부하긴 조금 어렵고, 저 역시 뭐 HTML을 잘 알지도 못합니다. 그래서 원하는 것만 얻으로 가보도록 하죠. 일단 HTML은 XML처럼 tag라는 것으로 구성되어 있습니다.

소스코드를 보면 저렇게 생긴거죠. beans-r-us는 세상에서 정말 간단한 홈페이지 중에 하나이므로 저렇게 HTML 코드가 간단합니다. <>로 구성된 것이 tag이구요. 뭐 여기까지만~^^ 저 코드에서는 원하는 가격은 strong이라는 tag에 들어 있다는 것을 알수 있네요. 그러나 복잡하면? 어렵겠죠...

이럴때 저는 크롬의 개발자 도구를 이용합니다.

개발자 도구를 켜고 위 그림에 표시된 단추를 누르고 웹페이지 위에 원하는 부분을 클릭하면 저렇게 해당하는 정보가 있는 부분의 글자로 이동합니다. 그러면 아~ strong tag구나~ 하고 알게 되는거죠.

이제 bs4로 접근해 보겠습니다. 먼저 url 변수에 beans-r-us 주소를 넣고, urlopen이라는 명령으로 해당 url을 열어봅니다. 그리고, 접근한 주소의 html 코드를 bs로 읽게 됩니다.

이제 find 명령으로 strong이라는 tag를 찾아서 price에 저장하라고 합니다. 거기서 tag에 쌓여져 있는 아이는 string이라는 속성에 저장되는데 불러오면 위 그림처럼 원하는 내용을 읽어올 수 있습니다.

조금 더 어려운 곳을 가볼까요? 네이버에서 네이버금융이라고 검생해서 들어갑니다~

그리고 시장지표를 클릭해서 들여다 봅니다. 여기서 미국 USD 정보를 얻어오기로 하겠습니다.

다시 크롬 개발자 도구로 원하는 정보가 있는 부분을 클릭합니다. 그러면 span tag라는 것을 알수 있네요. 그리고 그 tag에서 class라는 속성이 value인 경우라는 것을 알 수 있습니다.

그러나 코드를 조금 더 들여다 보면 span tag의 value class는 하나가 아니라는 것을 쉽게 알 수 있습니다. 그래서 find 명령이 아니라 find_all 명령을 사용하면 됩니다. 그러면 위 그림처럼 여러개의 결과가 list형으로 반환됩니다.

제가 찾는 정보는 그 중에서 첫 번째 정보이고 거기서 string 속성을 찾으면 되는군요^^ 위의 내용은 아래의 동영상으로도 강의됩니다.


반응형