티스토리 뷰
👩🎓 학창시절에 썼던 추억의 jupyter notebook으로 BeautifulSoup문서의 예제를 따라 해보겠습니다.
Anaconda-Navigator를 열어주세요.
저는 crawling_env 라는 가상환경을 만들고 BeautifulSoup4를 설치했습니다.
이 가상환경을 선택하고 jupyter notebook 의 Launch를 눌러주세요
New > Python3를 눌러서 노트북을 만들어주세요
노트북의 이름을 Beautifulsoup Test라고 정해줬습니다.
html 더미데이터를 하나 넣어두고 BeautifulSoup 객체를 만들어주세요
그럼 이제 Beautifulsoup으로 할 수 있는 것들을 살펴보겠습니다.
[1] soup.prettify()
prettify를 쓰면 이렇게 html 구조를 파악하기 쉽게 바꿔줍니다.
이제부터는 Beautifulsoup의 찐 기능(?)인 html에서 원하는 데이터를 뽑아내는 것을 살펴보겠습니다.
** 주피터 노트북에서는 print를 안써도 되서 이제부터는 안쓰겠습니다 **
[2] soup.태그이름
특정 태그안에 있는 데이터들을 뽑아내 줍니다.
[3] soup.태그이름.name과 soup.태그이름.string
soup.태그이름.name은 특정 태그의 이름을 알려주고
soup.태그이름.string은 특정 태그로 감싸져있는 string을 뽑아서 알려줍니다.
[4] soup.태그이름.parent과 soup.태그이름.parent.name
soup.태그이름.parent은 특정 태그의 부모 태그의 내용을 알려줍니다.
soup.태그이름.parent.name은 특정 태그의 부모 태그 이름을 알려줍니다.
참고로 부모태그가 없는 html은 document가 부모이름이라고 나오네요(??)
[5] soup.태그이름['class']
특정 태그의 class가 뭐라고 설정되어있는 지 알 수 있습니다.
[6] soup.find('태그이름') 또는 soup.select_one('태그이름')
태그 이름에 해당하는 첫번째 태그를 뽑아줍니다.
[7] soup.find_all('태그이름') 또는 soup.select('태그이름')
태그이름에 해당하는 모든 태그들을 뽑아내줍니다.
* find와 select의 차이
find는 html tag를 통한 크롤링 / select는 css를 통한 크롤링에 쓰인다고 합니다.
첫번째 태그를 찾는 것은 find, select_one 함수이고
모든 태그를 찾는 것은 find_all, select 함수입니다.
가장 큰 차이점은 select는 > 로 하위태그를 쉽게 찾을 수 있다는 점입니다.
예를 들어 head 태그 아래있는 title태그를 찾고 싶다고 할때, select가 더 직관적인 형태로 태그를 쫓을 수 있습니다.
여기 블로그를 보면 위의 예제보다 훨씬 더 깊숙히 있는 태그를 찾는 예제가 나오는데, select가 더 직관적이게 느껴집니다.
[8] soup.get_text()
html에서 텍스트만 뽑아낼 수 있습니다.
[9] 클래스 이름으로 element 찾기
https://stackoverflow.com/questions/5041008/how-to-find-elements-by-class
'🐍 > Python' 카테고리의 다른 글
[Python] 파이썬 타입힌트 (Type Hints) (0) | 2020.11.29 |
---|---|
[Pandas] 판다스로 Dataset 살펴보기 (유투브 트랜드 데이터 from 캐글) (0) | 2020.07.15 |
[Python] Slack봇 만들기 - Incoming Webhooks bots (2) | 2020.03.26 |
[BeautifulSoup] 영화관(CGV, 메가박스, 롯데시네마) 상영시간표 크롤링 (7) | 2020.03.16 |
[Python] Pycharm과 jupyter notebook에 아나콘다 가상환경을 추가하기 (0) | 2020.03.05 |
- Total
- Today
- Yesterday
- cocoapod
- Django Heroku Scheduler
- 장고 Custom Management Command
- drf custom error
- Python Type Hint
- SerializerMethodField
- flutter deep link
- 구글 Geocoding API
- PencilKit
- 플러터 싱글톤
- flutter build mode
- Watch App for iOS App vs Watch App
- METAL
- 플러터 얼럿
- Flutter Text Gradient
- ipad multitasking
- github actions
- DRF APIException
- ribs
- 장고 URL querystring
- Django FCM
- Flutter Spacer
- Sketch 누끼
- Dart Factory
- flutter 앱 출시
- Flutter 로딩
- Django Firebase Cloud Messaging
- Flutter getter setter
- Flutter Clipboard
- flutter dynamic link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |