[Python] 데이터 크롤링(data crawling) #1
데이터 크롤링

[Python] 데이터 크롤링(data crawling) #1

크롤링(crawling)이란?

 '웹 페이지를 그대로 가져와서 데이터를 추출해내는 행위' 입니다.

 즉, 웹 페이지에서 내가 원하는 특정 데이터만 쏙쏙 골라서 찾아내 사용하겠다는 겁니다.

 

대표적인 소프트웨어로 Beautiful Soup이 있는데, 자주 사용하게 될겁니다!.

바로 간단한 예제를 보겠습니다.

1
2
3
4
5
6
7
import urllib.request
from bs4 import BeautifulSoup
url = "http://www.naver.com" # 데이터를 가져올 사이트
req = urllib.request.Request(url)
sourcecode = urllib.request.urlopen(url).read()
soup = BeautifulSoup(sourcecode, "html.parser")
print(soup)
 

위 코드를 실행시키면, 네이버 메인 페이지의 모든 코드가 출력이 된다. F12를 눌러서 개발자 도구를 확인하면 나오는 결과와 같습니다.

웹 페이지에서 내가 원하는 특정 데이터를 추출해내기 위해서는, 원하는 데이터가 코드상에 어디에 위치해 있는지 파악하는 것이 중요합니다.

8
9
for span_text in soup.find_all("span"):
    print(span_text)

위 두 줄을 추가시키게 되면, 메인 페이지의 코드 중에서, "span" 태그를 모두 찾아 '리스트'로 반환합니다.

find와 find_all은 반환되는 형태가 다르기 때문에, 유의하자.

그 결과, "span" 태그를 포함하고 있는 요소만 찾아내었기 때문에, 어느정도 데이터를 걸러낼 수 있었지만, 

여전히 굉장히 많기 때문에, 조금 더 세부적으로 걸러내는 과정이 필요합니다.

 

그래서 위 8,9번 라인을 다음과 같이 바꿔보았습니다.

8
9
for span_text in soup.find_all("span", class_="ah_k"):
    print(span_text.get_text())

이전에는 "span"태그를 모두 찾아 리스트로 반환했지만,
지금은 "span" 태그이면서 class name이 "ah_k"인 요소를 찾아서 그 내용(get_text())을 반환하도록 하였습니다.

그 결과, 네이버의 실시간 검색어가 출력되는 것을 확인할 수 있을 것입니다.

 

실제로 결과를 확인해보면, 1~20 순위의 검색어가 중복되어 2번씩 나타납니다.

그렇다면 반복문을 사용하여, 20개의 정보만 가져오면 됩니다.

8
9
    for span_text in range(0,20) :
        list.append(soup.find_all("span", class_="ah_k")[span_text].get_text())

위의 8,9번 라인을 이렇게 바꿔주면, 1~20위의 정보를 제대로 가져올 수 있습니다.