상세 컨텐츠

본문 제목

파이썬 크롤링 따라 하기 - Beautifulsoup로 네이버 블로그 검색 결과 가져오기

컴퓨터 언어/Python

by cepiloth 2021. 5. 7. 17:35

본문

728x90
반응형

BeBeautifulSoup4 설치

커맨드 명령장으로 이동하여 BeautifulSoul4를 설치합니다.

pip install beautifulsoup4

 

설치 확인

pip show 명령어로 설치되었는지 확인합니다.

pip show beautifulsoup4

 

아래와 같은 결과 나온다면 정상 설치가 된 것입니다.

 

기본 설정

Beatifulsoup4 사용하기 위해 IMPORT 하기

import urllib.request
from bs4 import BeautifulSoup
# 최상단에 선언 합니다.

 

크롤링을 위한 기본 준비

URL의 주소에 접속하여 BeatifulSoup4 데이터 설정하는 단계

import urllib.request
from bs4 import BeautifulSoup

#url 은 네이버에 파이썬이라고 검색하고 나온 검색결과 URL 주소로 설정
url = 'https://search.naver.com/search.naver?where=view&sm=tab_jum&query=%ED%8C%8C%EC%9D%B4%EC%8D%AC'

#url 주소를 웹 페이지 읽어 오기
html = urllib.request.urlopen(url).read()

#HTML 데이터를 BeautifulSoup 읽기 
soup = BeautifulSoup(html, 'html.parser')

# 결과 확인
print(soup)

 

아래 화면처럼 나온다면 성공한 것이다. 원하는 데이터를 정제한 것이 아니라 웹사이트의 모든 HTML을 나오도록 하였기 때문에 전체 태그가 나온다.

 

타이틀만 출력하기

강좌에서는 'sh_blog_title' 로 class 명을 찾도록 되어 있지만 CHROME 브라우저에서 F12로 확인 결과 CLASS 명이 변경되어 있다. 그리하여 'api_txt_lines total_tit'으로 변경하였다.

import urllib.request
from bs4 import BeautifulSoup

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

# url 주소를 웹 페이지 읽어 오기
html = urllib.request.urlopen(url).read()

# HTML 데이터를 BeautifulSoup 읽기 
soup = BeautifulSoup(html, 'html.parser')

# html attribute 의 이름이 sh_blog_title 인 모든 node 를 찾는 함수
title = soup.find_all(class_='api_txt_lines total_tit')

# 결과 확인
print(title)

 

콘솔 출력 화면

 

데이터 정제하기

BeautifulSoup으로 읽은 데이터에서 속성이 title과 href(하이퍼링크) 데이터만 출력하도록 한다.

 전체 데이터를 출력하게 되어있어서 어떤 정보가 의미 있는 데이터인지 확인할 수가 없다. 원하는 속성(TAG)만 출력하기 위해서 아래처럼 반복문에서 href 속성을 갖고 있는 노드만 출력하도록 변경하였다. e.g) print(i.attrs['href']) 코드의 의미이다.

for i in title:
    print(i.attrs['href'])
    print()

하지만 현재 페이지의 HTML Tag에는 title 속성이 없어서 출력할 수 없다. href 링크 속성만 출력하도록 한다.

import urllib.request
from bs4 import BeautifulSoup

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

# url 주소를 웹 페이지 읽어 오기
html = urllib.request.urlopen(url).read()

# HTML 데이터를 BeautifulSoup 읽기 
soup = BeautifulSoup(html, 'html.parser')

# html attribute 의 이름이 sh_blog_title 인 모든 node 를 찾는 함수
title = soup.find_all(class_='api_txt_lines total_tit')

#강좌에서는 attrs['title'] 속성을 읽어서 처리 하게 되어있지만 현재 속성이 없다.
for i in title:
    print(i.attrs['href'])
    print()
    
# 결과 확인
# print(title)

title 속성이 없어서 href 속성만 출력한 결과이다. 데이터 정제를 위해서 네이버 검색 결과에서 필요한 정보인 title 과 href 모두 출력 못한 것이 아쉽다.

 

사용자 검색어를 입력받아서 크롤링 하기

import urllib.parse 필요

baseUrl 른 그대로 사용하고 input 메서드로 사용자에 입력을 받아 입력받은 문자열을 quote_plus로 정제하여 쿼리 문과 연결하여 검색할 수 있도록 처리 추가

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

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

# 사용자에게 입력을 받아서 입력된 단어로 검색하기
plusUrl = input('검색어를 입력하세요: ')

# 쿼리와 검색어를 합쳐서 url 로 만들기
url = baseUrl + urllib.parse.quote_plus(plusUrl)

# url 주소를 웹 페이지 읽어 오기
html = urllib.request.urlopen(url).read()

# HTML 데이터를 BeautifulSoup 읽기 
soup = BeautifulSoup(html, 'html.parser')

# html attribute 의 이름이 sh_blog_title 인 모든 node 를 찾는 함수
title = soup.find_all(class_='api_txt_lines total_tit')

#강좌에서는 attrs['title'] 속성을 읽어서 처리 하게 되어있지만 현재 속서이 없다.
for i in title:
    print(i.attrs['href'])
    print()
    
# 결과 확인
# print(title)

 

www.inflearn.com/course/%EC%97%85%EB%AC%B4%EC%9E%90%EB%8F%99%ED%99%94-%ED%8C%8C%EC%9D%B4%EC%8D%AC-pyautogui-%ED%81%AC%EB%A1%A4%EB%A7%81%EA%B8%B0%EC%B4%88/lecture/27335?tab=curriculum

 

업무 자동화를 위한 파이썬 pyautogui, beautifulsoup 크롤링 기초 - 인프런 | 학습 페이지

지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....

www.inflearn.com

 

728x90
반응형

관련글 더보기

댓글 영역