컴공생의 다이어리
[파이썬, Python] BeautifulSoup으로 크롤링(crawling)(1) - find(), find_all(), .string, get_text() 본문
[파이썬, Python] BeautifulSoup으로 크롤링(crawling)(1) - find(), find_all(), .string, get_text()
컴공 K 2021. 5. 28. 00:01BeautifulSoup
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()의 경우 유니코드 형식으로 텍스트까지 문자열로 반환하기 때문에 아무 정보도 출력되지 않는다.
'Development > Python & Django' 카테고리의 다른 글
Django와 Bootstrap을 사용해 구현한 웹사이트 (0) | 2021.06.28 |
---|---|
[파이썬, Python] BeautifulSoup으로 크롤링(crawling)(2) - select() 옵션 (1) | 2021.05.29 |
[Django] 장고 모델(model) 수정시 - makemigrations, migrate (0) | 2021.05.25 |
[Django] 장고 TIME_ZONE, USE_TZ 설정 (0) | 2021.05.24 |
[Django] 장고 데이터베이스 생성(python manage.py migrate) (0) | 2021.05.23 |