Notice
Recent Posts
Recent Comments
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 |
Tags
- openCV
- aws jupyter notebook
- programmers
- 코딩테스트
- Stack
- Matplotlib
- Join
- 알고리즘스터디
- String Method
- 노마드코딩
- type hint
- 자료구조
- 정보처리기사 c언어
- Algorithm
- 파이썬
- 가상환경
- javascript
- 백준
- 알고리즘
- 알고리즘 스터디
- pandas
- 데이터시각화
- queue
- 프로그래머스
- NumPy
- dataframe
- Selenium
- python
- MySQL
- 선그래프
Archives
- Today
- Total
조금씩 꾸준히 완성을 향해
[Python] BeautifulSoup 기본 사용법 정리 본문
BeautifulSoup에 대한 기본적인 사용법을 정리해 보겠다.
▶ 기본 셋팅
#라이브러리 import
import requests
from bs4 import BeautifulSoup
# 네이버 웹툰 url
url = "https://comic.naver.com/index"
res = requests.get(url)
res.raise_for_status()
# html 문서를 가져와서 lxml parser 혹은 html parser를 통해서 soup 객체로 생성
soup = BeautifulSoup(res.text, 'lxml')
soup = BeautifulSoup(res.text, 'html.parser')
▶ 태그명 바로 가져오기
print(soup.title.get_text()) # title 태그의 text만 가져옴
#결과: '네이버 웹툰'
print(soup.a) # soup 객체에서 처음 발견되는 a element 출력
#결과: <a href="#menu" onclick="document.getElementById('menu').tabIndex=-1;document.getElementById('menu').focus();return false;"><span>메인 메뉴로 바로가기</span></a>
print(soup.a.attrs) # a element의 속성정보를 출력
#결과: {'href': '#menu', 'onclick': "document.getElementById('menu').tabIndex=-1;document.getElementById('menu').focus();return false;"}
print(soup.a["href"]) # a element의 href 속성 '값' 정보를 출력
#결과: '#menu'
▶ find 함수로 찾기
이름, 속성, 속성값을 특정하여 태그를 찾을 수 있다.
# class name이 'Nbtn_upload'인 a element 출력(처음으로 발견되는)
print(soup.find('a', attrs={'class': 'Nbtn_upload'}))
print(soup.find('a', 'Nbtn_upload')) #기본적으로 두번째 파라미터는 class로 세팅된다
#결과: <a class="Nbtn_upload" href="/mypage/myActivity" onclick="nclk_v2(event,'olk.upload');">웹툰 올리기</a>
# class name이 'Nbtn_upload'인 어떤 element 출력(처음으로 발견되는)
print(soup.find(attrs={'class': 'Nbtn_upload'}))
#결과: <a class="Nbtn_upload" href="/mypage/myActivity" onclick="nclk_v2(event,'olk.upload');">웹툰 올리기</a>
#class name이 'tit'인 모든 element들 찾기
all_tit = soup.find_all(attrs={'class': 'tit'})
for tit in all_tit:
print(tit)
''' 결과:
<a class="tit" href="/webtoon/detail?titleId=747269&no=120" id="recommand_titleName_0" title="전지적 독자 시점">전지적 독자 시점</a>
<a class="tit" href="/webtoon/detail?titleId=750184&no=111" id="recommand_titleName_1" title="나쁜사람">나쁜사람</a>
<a class="tit" href="/webtoon/detail?titleId=738694&no=125" id="recommand_titleName_2" title="튜토리얼 탑의 고인물">튜토리얼 탑의 고인물</a>
<a class="tit" href="/webtoon/detail?titleId=717481&no=207" id="recommand_titleName_3" title="일렉시드">일렉시드</a>
<a class="tit" href="/webtoon/detail?titleId=667573&no=344" id="recommand_titleName_4" title="연놈">연놈</a>
'''
※ tag object 확인
object_tag = soup.find('a')
#태그의 이름
object_tag.name
#결과: 'a'
#태그에 담긴 텍스트
object_tag.text
#결과: '웹툰 올리기'
#태그의 속성과 속성값
object_tag.attrs
#결과: {'href': '/mypage/myActivity', 'class': ['Nbtn_upload'], 'onclick': "nclk_v2(event,'olk.upload');"}
▶ select 함수
select는 CSS selector로 tag 객체를 찾아 반환한다. find처럼 태그 이름, 속성, 속성값을 특정하는 방식은 같으나 그 이외에도 다양한 선택자(selector)를 갖기 때문에 여러 요소를 조합하여 태그를 특정하기 쉽다.
# 태그 이름만 특정
soup.select_one('a')
# 태그 class 특정
soup.select_one('.Nbtn_upload')
# 태그 이름과 class 모두 특정
soup.select_one('a.Nbtn_upload')
# 태그 id 특정
soup.select_one('#updateCompositionContent')
# 태그 이름과 id 모두 특정
soup.select_one('div#updateCompositionContent')
# 태그 이름과 class, id 모두 특정
soup.select_one('div.genreRecomBox_area#updateCompositionContent')
#find vs select
soup.find('div').find('p')
soup.select_one('div > p')
예를 들어 특정 경로의 태그를 반환하고 싶을 때, find의 경우 반복적으로 코드를 덧붙여야 한다. select는 직접 하위 경로를 지정할 수 있기 때문에 간편하다.
'Python > Web Scraping' 카테고리의 다른 글
[selenium] Implicit Waits(암묵적대기) vs Explicit Waits(명시적대기) (0) | 2022.09.14 |
---|---|
[Python] selenium click 에러 (ElementClickInterceptedException) (0) | 2022.09.14 |
[Python] selenium 네이버 로그인 / 자동입력 방지 우회 (0) | 2022.09.14 |
[Python] 파이썬 크롤링 / requests, User-Agent 기본 셋팅 (0) | 2022.09.13 |