반응형

응용】 파이썬 웹 크롤링#1 (Web Crawling)

 

크롤링이란,  인터넷에서 특정검색(어)로 검색하여 (자료를) 긁어 모우는 행위를 일컫는다. 이를 파이썬코드나 시스템을 이용해서 반자동으로 긁어 모으게 되는데, 

이를 웹스크래핑이라고도 부른다.   긁어 내는데 사용하는 도구인 아래 스크래퍼를 의미하는 용어가 사용 된 것이다. 

 

 

1. 네이버 검색창에서 '파이썬'으로 검색한 결과(블로그 항목만-클릭)을 띄워보면,  아래처럼 나타난다.

 

2. 위, 네이버 검색결과를 아래파이썬 코드를 이용해서 뽑아낼 수 있다. 

이를 위해 사용되는 요소가  BeautifulSoup(뷰티플 스웁) 이다.

 

import urllib.request

from bs4 import BeautifulSoup

 

url = 'https://search.naver.com/search.naver?where=post&sm=tab_jum&query=%ED%8C%8C%EC%9D%B4%EC%8D%AC'

html = urllib.request.urlopen(url).read()

soup = BeautifulSoup(html, 'html.parser')

print(soup)


하지만, 아래와 같은 엄청나게 많은 잡다한 형태로 출력이 된다. 

 

3.  현재 상태에서는 잡다한 웹페이지 내용까지 모두 코딩 결과창에 출력된다.  따라서,

아래는 웹(크롬) 브라우저 창에서 F12를 눌러 검색페이지별 제목('title')과, 링크 주소('href') 부분의 특정요소만 걸러서 나오도록 조치한 방법이다.   

검색 결과창의 웹 브라우저에서 F12 를 누르면 아래처럼 웹페이지의 분석도구를 사용할 수 있다. 

그래서 Html의 기본만 알아도 쉽게 파악 할 수 있으나,  전혀 모르더라도,  쉬운 것 몇 가지만 기억해두면 된다. 

예를 들어, 네이버 블로그에서는 HTML 문서에서 제목(타이틀) 앞에는 'sb_blog_title' , 그리고 'title' 글자가 항상 들어가 있다는 것과, 

링크 주소 앞에는 'href=...' 라는 형태로 되어 있다는 정도만 알아도 검색을 더 깔끔하게 할 수 있다.

F12 키를 눌러 웹 상에서의 분석도구를 불러낸 화면

 

 

import urllib.request

from bs4 import BeautifulSoup

 

url = 'https://search.naver.com/search.naver?where=post&sm=tab_jum&query=%ED%8C%8C%EC%9D%B4%EC%8D%AC'

html = urllib.request.urlopen(url).read()

soup = BeautifulSoup(html, 'html.parser')

title = soup.find_all(class_='sh_blog_title')

print(soup)

 

그래도 여전히 잡다하게 출력되어 보기 어렵다.

 

4. 네이버에서 검색창에 파이썬으로 검색하고, 블로그 항목(파이썬)의 Url 링크들만 크롤링 하는 방법

그리고, 웹페이지를 통하지 않고 검색어를 파이썬 터미널에서 직접 입력하도록 변경하는 법.

( 첫 페이지 약10개 검색에 한해서)

 

아래 주소 부분을 네이버에서 검색후 블로그 항목을 클릭한 후 복사해 온다.  

(주소부분 중 %ED%8C%8C%EC%9D%B4%EC%8D%AC 는 '파이썬' 검색어의 아스키? 변환값)

 

 

---  파이썬 코드 ---

import urllib.request

from bs4 import BeautifulSoup

 

baseurl = 'https://search.naver.com/search.naver?where=post&sm=tab_jum&query='

# 검색어인 " %ED%8C%8C%EC%9D%B4%EC%8D%AC " 부분을 빼고,  input(입력) 구문을 넣었다.

plusurl input('검색어를 입력하세요:')

url = baseUrl + plusUrl

html = urllib.request.urlopen(url).read()

 

soup = BeautifulSoup(html, 'html.parser')

title = soup.find_all(class_='sh_blog_title')

 

for i in title:

    print(i.attrs['title'])    # 제목('title') 부분만 출력

    print(i.attrs['href'])    # 링크 주소('href') 부분만 출력

    print() 

(단, 이 방법은 새로운 검색어를 입력 할 때 마다 주소를 복사해서 코드에 넣어야 하는 단점이 있다)  

출력 결과 1 :  (영문으로 'python' 입력 한 경우 : 영문의 경우 문제없이 잘 출력됨.)

출력 결과2 :  (하지만, 한글로 '파이썬' 입력 한 경우 : 한글입력의 경우 아래처럼 한글 변환에 문제가 되면서 에러가 남.)

 

5.  한글 검색에서의 에러 현상을 잡기위해 한글 변환 코드를 넣어 크롤링 해보자. 

 

import urllib.request

import urllib.parse  # 한글 검색어 변환 처리를 위해 임포트함

from bs4 import BeautifulSoup

 

baseUrl = 'https://search.naver.com/search.naver?where=post&sm=tab_jum&query='

plusUrl = input('검색어를 입력하세요:')

한글처리를 위해 추가됨 : urllib.parse.quote_plus()

url = baseUrl + urllib.parse.quote_plus(plusUrl)

html = urllib.request.urlopen(url).read()

soup = BeautifulSoup(html, 'html.parser')

title = soup.find_all(class_='sh_blog_title')

 

for i in title:

    print(i.attrs['title'])

    print(i.attrs['href'])

    print()

 

출력 결과 : 아래처럼 한글로 '파이썬'을 입력 후에도 결과가 제대로 출력 되었음을 알수 있다.

여기까지 되면,  추후에 간단히 파일 저장 명령어를 추가하여 검색결과를 파일로 저장 할 수도 있다. 

 

파이썬, 코드 다운로드 :

webscraper2.py
0.00MB

반응형