1. select_one()
🥑 find가 원하는 태그를 찾는게 목적이라면 select는 CSS selector로 tag 객체를 찾아 반환
🥑 select_one()은 원하는 태그 하나만 가져오고, 태그가 많은 경우에는 맨 앞의 것만 가져옴
🐰 select 계열의 메소드는 css selector 이용 가능
🐰 '.' -> class 속성 / '#' -> id 속성
🐰 class : 하나의 html 에서 여러 태그에 중복 사용 가능
🐰 id : 하나의 html에서 한번만 사용. 권장사항
# 요소 내 text 가져오기
title = soup.select_one('title')
print(title.string) # 선택된 요소 text만
print(title.text)
print(title.get_text())
# text, get_text는 하위 text 까지 같이
1) select_one('태그명') 사용 예제
# 다음 > 뉴스 > IT > 오늘의 연재의 첫번째 글 제목과 신문사 들고오기
url = 'https://news.daum.net/digital#1'
resp = requests.get(url)
soup = bs(resp.text, 'html.parser')
tag_series = soup.select_one(('.list_todayseries li'))
pprint.pprint(tag_series)
tag_series_title = tag_series.select_one('.link_txt').text
print(f'제목: {tag_series_title}')
# 제목: 전자사전으로 인기 끌던 '샤프'...최근엔 AI 아바타와 함께
tag_series_press = tag_series.select_one('.txt_info').text
print(f'신문사: {tag_series_press}')
# 신문사: 전자신문
2) select_one('CSS선택자') 예제
import requests
from bs4 import BeautifulSoup as bs
import pprint
# 할리스 커피 : 매장 검색
url = 'https://www.hollys.co.kr/store/korea/korStore2.do'
resp = requests.get(url)
soup = bs(resp.text, 'html.parser')
# 매장 테이블 가져오기
stores = soup.select_one('#contents > div.content > fieldset > fieldset > div.tableType01 > table')
pprint.pprint(stores)
📌 왼쪽은 css selector로 가져온 결과이다
➡️ selector 소스를 가져오는 방법은 html 소스코드 중 해당 태그 위에 커서를 가져다 놓고 우클릭 ▶️ 복사 ▶️ selector 복사 버튼을 클릭하면 된다.
# 첫 번째 가게 관련
first_store = stores.select_one('#contents > div.content > fieldset > fieldset > div.tableType01 > table > tbody > tr:nth-child(1)')
pprint.pprint(first_store)
# td:nth-child(1) -> td 태그중 첫번째
second_store_name = first_store.select_one('td:nth-child(2)')
print(second_store_name.text)
# 부산사상광장점
# td:nth-child(1) -> td 태그중 4번째
second_store_addr = first_store.select_one('td:nth-child(4)')
print(second_store_addr.text)
# 부산광역시 사상구 광장로 22 (괘법동) 2층 사상구 괘법동 565-2
2. select()
🥑 CSS selector로 지정한 태그들을 모두 가져오는 메소드로 가져온 태그들은 모두 리스트에 보관
# 네이버 환율 크롤링
# 네이버에서 '환율' 검색 후 '환율 더보기'
url = 'https://finance.naver.com/marketindex'
resp = requests.get(url)
soup = bs(resp.text, 'html.parser')
pprint.pprint(soup)
# 환전고시 국가 가져오기
nations = soup.select('#exchangeList > li > a.head > h3 > span')
print(nations) # 리스트로 반환
# 나라별 환율 가져오기
exchange_rates = soup.select('#exchangeList > li > a.head > div > span.value')
print(exchange_rates)
# 나라별 화폐 단위와 환율 같이 출력하기
for idx, item in enumerate(nations):
print(f'{item.text} : {exchange_rates[idx].text}')
'''
실행결과)
미국 USD : 1,317.50
일본 JPY(100엔) : 895.98
유럽연합 EUR : 1,440.55
중국 CNY : 182.99
'''
3. CSS selector
1) 태그명 선택 ex. li, a
test = soup.select('a')
2) 하위 태그 선택 ex. ul a / ul > a
# 상위 태그 > 하위 태그
test = soup.select('li a')
test = soup.select('li > a')
3) 클래스 이름으로 선택 ex. li.course / .course / li.course.paid
# 태그.클래스명
test = soup.select('li.value')
# .클래스명
test = soup.select('.value')
# 태그.클래스명.클래스명 (여러 클래스가 있는 경우)
test = soup.select('li.value.fieldset')
4) id 이름으로 선택 ex. #start
# '#id이름'
test = soup.select('#list50')
# '태그명#id이름'
test = soup.select('tr#list50')
[ 내용 참고 : IT 학원 강의 ]
'Programming Language > Python' 카테고리의 다른 글
[Python] 넘파이(Numpy) | 정의, 배열 생성 방법 및 관련 함수, 데이터 형식 (0) | 2024.03.11 |
---|---|
[Python] 웹 크롤링 | 이미지 가져오기 및 저장 (0) | 2024.03.10 |
[Python] 웹 크롤링 | BeautifulSoup 사용법, find() 와 find_all() (1) | 2024.03.08 |
[Python] 웹 크롤링 | request 와 requests, 크롤링 허용 여부 확인방법 (1) | 2024.03.07 |
[Python] XML 정의 및 xmltodict 라이브러리, 예제 (2) | 2024.03.06 |