티스토리 뷰

반응형

우린 흔히 크롤링(crawling) 혹은 스크레이핑(scraping)은 웹 페이지를 그대로 가져와서 거기서 데이터를 추출해 내는 행위다라고 함께 혼용해서 사용하지만, 사실상 의미상의 차이가 있다.

크롤링은 전부 싹다 발라먹는 다는 개념이고, 스크래핑은 뭔가 필요한 정보를 추출해서 발라먹는 느낌(?)이랄까?

싹다 가져오면 아마도 그 다음 행위로 그것을 분석해서 내게 필요한 정보만을 추출하는 다음동작이 예상된다.

지구상에서 현존하는 최고의 크롤링 프로그램은 파이썬이 아닐까 싶다. 그래서 점점 이 파이썬을 이용하는 사람들이 급증하는 것이 그 답이 될 것이다.

 

네이버의 블로그글의 타이틀과 그 글의 주소를 검색해서 엑셀 CSV로 저장하는 프로그램코드가 그리 길지 않다. 그리고 아무래도 언어가 직관적이라 더 접근하기 쉽다.

 

import csv
import urllib.request
import urllib.parse
from bs4 import BeautifulSoup

PlusUrl = urllib.parse.quote_plus(input('검색어를 입력하세요 : '))

PageNum = 1
count = 1

i = input('몇 페이지를 크롤링 하시겠습니까? : ')
lastPage = int(i) * 10 - 9
searchList = []

while PageNum < lastPage + 1 :
    url = 'https://search.naver.com/search.naver?date_from=&date_option=0&date_to=&dup_remove=1&nso=&post_blogurl=&post_blogurl_without=&query={}&sm=tab_pge&srchby=all&st=sim&where=post&start={}'.format(PlusUrl,PageNum)
    
    html = urllib.request.urlopen(url).read()
    soup = BeautifulSoup(html, 'html.parser')

    title = soup.find_all(class_='sh_blog_title')
    
    print('============ {}페이지 결과입니다 =========='.format(count))
    print()
    for i in title :
        print(i.attrs['title'])
        print(i.attrs['href'])
        temp = []
        temp.append(i.attrs['title'])
        temp.append(i.attrs['href'])
        searchList.append(temp)
    print()

    PageNum = PageNum + 10
    count += 1

print()
print('=============================================')
print('숫자 1을 입력 = 실행')
print('다른숫자 입력 = 실행하지않음')
print('=============================================')

o = int(input('엑셀저장을 실행하시겠습니까? '))
if o == 1 : 
    f = open('SEARCH RESULT.csv', 'w', encoding='utf-8', newline='')
    csvWriter = csv.writer(f)
    for k in searchList :
        csvWriter.writerow(k)
    f.close()
    print('엑셀저장이 완료되었습니다.')   
else : 
    print('엑셀저장을 실행하지 않았습니다')

네이버의 리뉴얼이 일어나면 위의 코드는 정상작동하지 않을 수 있기에 프로그램에 대한 이해가 필요한 것이다. 그래서 바뀐 웹사이트의 정보에 맞춰 바꿔주면 코드는 언제든 재사용이 가능한 것이다.

csv, urllib.requet, urllib.parse, BeautifulSoup 등 import하는 것들에게 공부도 필요하다. 사용법은 매우 간단하지만, 잘 설명한 글을 찾아보긴 쉽지 않기에 최대한 이해가 될 수 있도록 정리하는 것이 중요하다.

 

자신의 것으로 만들어야 그걸 응용하는 능력이 생긴다.

요즘은 너무 좋은 프로그램환경이란 것이 남이 만든 멋진 코드도 내 것으로 변행해서 얼마든지 사용하는 것이 허용된다. 물론 제약이 있는 것도 있지만, 우리가 흔히 말하는 '오픈소스'라는 것이 세상의 발전을 더 촉진시킨다.

 

구글의 성장 동력도 바로 '오픈 소스'에 기반된다고 나는 생각한다.

서로 공유하면서 커지는 가치... 그리고 그것이 바꾸는 세상말이다.

 

반응형
댓글