텍스트형태의 데이터에서 원하는 html 요소에 어떻게 접근할 수 있을까?

이를 쉽게 해결할 수 있게 도와주는 라이브러리가 있다.

이는 BeautifulSoup이며, 날 것의 html을 의미있는 객체로 만들어서 사용자가 원하는 데이터를 가져올 수 있게 만들어준다.

 

BeautifulSoup4 설치

!pip install beautifulsoup4

 

BeautifulSoup 사용법

import requests
from bs4 import BeautifulSoup

url='https://kin.naver.com/search/list.nhn?query=%ED%8C%8C%EC%9D%B4%EC%8D%AC'

response=requests.get(url)

if(response.status_code==200:
	html=response.text
    soup=BeautifulSoup(html,'html.parser')
    print(soup)
    
else:
	print(response.status_code)

네이버 지식인에 파이썬을 검색한 url이다. 응답코드가 200일때 html을 받아와 soup객체로 변환한다.

 

네이버 지식인 크롤링 예제

네이버 지식인에 '파이썬'을 검색하면 첫 번째로 나오는 제목을 가져오려면 어떻게 해야할까?

우선, "https://kin.naver.com/search/list.nhn?query=%ED%8C%8C%EC%9D%B4%EC%8D%AC" 다음 사이트로 이동해 F12버튼을 눌러보자.

F12 버튼

요소를 찾기 위해서는 다음과 같은 방식을 따른다.

Ctrl+Shift+C 를 누르면 마우스 커서가 움직이는 곳의 element를 찾게 도와준다. 그 후 클릭을 하면 원하는 html의 element 정보를 오른쪽 창에서 보여준다.

 

찾은 html에 copy selector 기능을 이용해보자.

*copy X_path를 사용해도 상관없다.

html에 오른쪽 마우스를 클릭후 copy->copy selector를 선택해 준다.

css selector

이제 css selector가 복사되었고, 이를 코드에 적용해보자.

import requests
from bs4 import BeautifulSoup

url = 'https://kin.naver.com/search/list.nhn?query=%ED%8C%8C%EC%9D%B4%EC%8D%AC'

response = requests.get(url)

if response.status_code == 200:
    html = response.text
    soup = BeautifulSoup(html, 'html.parser')
    title = soup.select_one('#s_content > div.section > ul > li:nth-child(1) > dl > dt > a')
    print(title)
else : 
    print(response.status_code)
    

<a class="_nclicks:kin.txt _searchListTitleAnchor" href="https://kin.naver.com/qna/detail.nhn?d1id=8&amp;dirId=80101&amp;docId=362502659&amp;qb=7YyM7J207I2s&amp;enc=utf8§ion=kin&amp;rank=1&amp;search_sort=0&amp;spq=0" target="_blank"><b>파이썬</b>배우기 쉬운곳 찾아요!!</a>

select_one은 하나의 html element를 찾는 함수이다. css selector를 select_one함수의 인자로 넣어준다.

여기서 바로 soup.select_one().get_text()를 한다면 텍스트만 뽑아올 수 있다.

 

+ Recent posts