컴공생의 다이어리

[파이썬, Python] BeautifulSoup으로 크롤링(crawling)(1) - find(), find_all(), .string, get_text() 본문

Development/Python & Django

[파이썬, Python] BeautifulSoup으로 크롤링(crawling)(1) - find(), find_all(), .string, get_text()

컴공 K 2021. 5. 28. 00:01

BeautifulSoup

Beautiful Soup은 HTML 및 XML 문서를 구문 분석하기위한 Python 패키지이다. HTML에서 데이터를 추출하는 데 사용할 수있는 구문 분석 된 페이지에 대한 구문 분석 트리를 만들며, 웹 스크래핑에 유용하다.

 

(만일 BeautifulSoup 패키지가 설치되지 않았다면 [pip install bs4] 명령어를 통해 설치)

 

find() 함수

find() 함수는 조건을 만족하는 태그를 하나만 가져오는 함수이다.

만일 아래와 같이 p 태그가 여러 개 있을 경우에도 find() 함수는 p태그 중 첫번째 태그 1개만 가져온다.

 

위의 ex2의 html 코드 중 p태그가 3개가 있는데 여기서 align 속성이 center, right, left로 각각 다른 것을 볼 수 있다. p 태그의 속성을 이용해서 find함수로 조회하면 아래와 같다.

 

 

 

find_all() 함수

find_all() 함수는 원하는 태그가 여러 개 있을 경우 해당하는 태그를 한꺼번에 가져오는 함수이다.

웹 페이지는 동일한 태그가 아주 많이 있기 때문에 find()함수보다는 find_all()함수를 사용하는 경우가 많다.

 

만일 한가지 태그만 찾는 것이 아니라 여러 가지의 태그를 찾아야 하는 상황이라면 어떻게 해야할까? 이 경우 아래처럼 찾고 싶은 태그를 리스트로 find_all() 함수에 넣어주면 된다.

 

 

문장 가져오기 : .string, get_text() 

find() 함수와 find_all() 함수를 통해 원하는 태그의 정보를 가져오는데 성공했다. 하지만 우리에게 필요한 부분은 화면에 보여지는 내용이 가장 중요하다. 태그 내의 문장을 가져오는 방법에는 .string과 get_text()를 사용하는 방법이 있다.

.string을 사용하는 것은 아래와 같다.

 

get_text() 함수를 통해 태그 내의 텍스트 데이터를 추출하는 것은 아래와 같다.

 

그렇다면 .string과 get_text()의 차이는 무엇일까?

아래의 ex4를 보면 p태그들 중 2번째 p태그에는 텍스트 데이터가 없다.

위의 결과를 보면 알겠지만 .string의 경우 문자열이 없으면 None을 출력하지만, get_text()의 경우 유니코드 형식으로 텍스트까지 문자열로 반환하기 때문에 아무 정보도 출력되지 않는다.

 

 

 

http://www.yes24.com/Product/Goods/78227084

 

완친파 웹크롤러 대마왕편

『완친파 웹크롤러 대마왕편』은 인터넷에 있는 수많은 데이터들을 어떻게 수집하면 되는지 아주 친절하게 알려주는 책이다. 파이썬 언어와 Beautiful Soup , Selenium 을 활용하여 인터넷에 있는 수

www.yes24.com

https://ssons.tistory.com/6

 

[파이썬] BeautifulSoup 에서의 get_text() vs string 차이점

get_text - 일반적으로 텍스트 부분만 모두 추출함. - 하나의 스트링을 만들어 리턴함. string - 스트링만 리스트로 추출함. - 줄바꿈, 공백 등 필요없는 것들에 제거한 스트링 리스트를 리턴함. ex) 예

ssons.tistory.com

728x90
Comments