본문 바로가기
TOP
데이터 스킬업/웹크롤링

[파이썬: 웹크롤링] #05 웹에서 텍스트 정보 뽑아내기 with BeautifulSoup, select, get_text (feat. 중복 경로 확인하기)

by 티챠림 2023. 3. 1.

[왕초보 웹크롤링 무작정 따라하기] 웹크롤링, BeatifulSoup, 태그 추출, .select(), 텍스트 추출, 문자값 추출, get_text()


#04 웹에서 텍스트 정보 뽑아내기


문자 데이터 추출하기 (바로가기 Click)

중복 경로 확인하기 (바로가기 Click)


이전 쳅터에서 BeautifulSoup으로 html을 파싱하고 경로를 파악하는 것까지 해보았다. 이제 select와 get_text 메소드를 사용해서 실제 데이터를 뽑아내보도록 하자.

 

  html에서 문자 데이터 추출하기 select(), get_text()

앞서 파악했던 '프로그램명'들에 대한 경로 'td > p > a'를 select() 괄호 안에 넣으면 경로에 해당하는 데이터가 추출된다.  program_names = soup.select('td > p > a')으로 정의해주고 program_names을 출력해 보자.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://search.naver.com/search.naver?where=nexearch&sm=tab_etc&mra=blUw&qvt=0&query=%EC%A3%BC%EA%B0%84%EC%98%88%EB%8A%A5%20%EC%8B%9C%EC%B2%AD%EB%A5%A0")
soup = BeautifulSoup(response.text, 'html.parser') 

program_names = soup.select('td>p>a') #지정한 경로의 html을 추출
program_names

코드 실행 화면

코드를 실행해보면 <a>태그에 속하는 데이터들이 [리스트] 안에 나열되고, 그 안에 추출하려는  '프로그램명'이 포함되어 있는 것을 확인할 수 있다. 프로그램명은 <태그>와 </태그> 사이에 위치한 것을 볼 수 있는데 이는 태그에 초함된 별도의 텍스트 요소이기 때문이다. 이러한 텍스트 요소만을 추출하기 위해서는 하나의 메소드가 더 필요한데, get_text()가 사용된다. 

 

하지만 .get_text()는 [리스트] 자료형에서  사용할 수 없다. 때문에 리스트의 각 <a>태그를 하나씩 뽑아서 .get_text()메소드를 적용해야한다. 태그 하나하나 뽑는 코드를 적을 수도 있지만, 이런 반복 작업은특정 조건을 반복하는 for문을 통해 자동화할 수 있다. 각 <a>태그가 나열된 program_names 리스트에서 <a>태그를 하나씩 뽑아서 .get_text()를 실행하는 것이다.  

import requests
from bs4 import BeautifulSoup

response = requests.get("https://search.naver.com/search.naver?where=nexearch&sm=tab_etc&mra=blUw&qvt=0&query=%EC%A3%BC%EA%B0%84%EC%98%88%EB%8A%A5%20%EC%8B%9C%EC%B2%AD%EB%A5%A0")
html_data = BeautifulSoup(response.text, 'html.parser') 
program_names = html_data.select('td > p > a')

#반복문을 사용해서 각 태그의 텍스트값만 출력
for tag in program_names:
	print(tag.get_text())

코드 실행 결과

 

 

  개발자 도구로 경로 중복 확인 하기

실행해 보면 생각과 다르게 프로그램명 뿐만 아니라 채널명도 함께 출력된 것을 볼 수 있다. html로 돌아가 이유를 찾아보자. '채널'의 html 태그를 확인해 보니 '프로그램명'과 동일하게 <td> 태크 안에 <p> 태그 안에 <a>태그에 위치해 있었다. 즉, '프로그램명'과 '채널'의 경로가 같기 때문에 둘다 추출된 것이다. 이러한 상황을 예방하는 방법으로 개발자도구의 검색을 사용할 수 있다.

동일한 구조로 이루어진 프로그램명과 채널
개발자도구의 검색창을 킨 화면(좌), 검색창 화살표를 내려서 동일한 태그 위치를 확인(우)

개발자도구가 켜진 상태에서 'ctrl+f'를 누르면 검색창이 나오는데, 여기에 찾는 태그를 입력하면 색상으로 표시해 주고 검색창 우측 화살표를 누르면 하나씩 옮겨가며 동일한 태그의 위치를 확인할 수 있다. 경로를 찾다보면 의도치 않게 중복되는 경우가 종종 있으니 종종 활용하게 되는 팁이다. 다음 쳅터에서는 중복된 경로를 필터링하는 방법을 알아보자.

 

▼다음편 이어보기▼

 

[파이썬: 웹크롤링] #06 html/CSS 선택자 선택하기 with Select & Find

[왕초보 웹크롤링 무작정 따라하기] 파이썬 반복문(for문/폴문), .select(), .find(), html 추출, 태그 추출, 선택자 추출, 필터링. 업무지옥을 탈출한 건에 대하여(feat.업무자동화) #06 html/CSS 선택자 선택

charimlab.tistory.com

댓글