크롤링(crawling)이란?
'웹 페이지를 그대로 가져와서 데이터를 추출해내는 행위' 입니다.
즉, 웹 페이지에서 내가 원하는 특정 데이터만 쏙쏙 골라서 찾아내 사용하겠다는 겁니다.
대표적인 소프트웨어로 Beautiful Soup이 있는데, 자주 사용하게 될겁니다!.
바로 간단한 예제를 보겠습니다.
1
2
3
4
5
6
7
|
import urllib.request
from bs4 import BeautifulSoup
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) :
|
위의 8,9번 라인을 이렇게 바꿔주면, 1~20위의 정보를 제대로 가져올 수 있습니다.
'데이터 크롤링' 카테고리의 다른 글
[Python] 데이터 크롤링(data crawling) #3 (0) | 2019.07.09 |
---|---|
[Python] 데이터 크롤링(data crawling) #2 (0) | 2019.07.09 |