크롤링 기초 (2) : 기본 용법 / select
기초/Python2022. 1. 11. 21:40
태그명과 클래스명 등으로 필요한 부분을 지정하고 데이터를 추출하는 방법 이외에,
select() 라는 함수를 이용하는 방법도 있다. *서로 호환되며 교차 사용이 가능함
*find()와 마찬가지로 결과값은 리스트 형태로 반환된다.
맨 처음 찾은 값만 가져오고 싶을 때는 select_one() 을 써주면 해당 객체만 추출된다.
import requests as req
from bs4 import BeautifulSoup as b
res = req.get('https://www.naver.com/')
soup = b(res.content,'html.parser')
# 태그명은 그냥 따옴표 안에 적어 준다.
somedata = soup.select_one('div')
# 클래스명을 써줄 때는 . 뒤에 적어 준다.
somedata2 = soup.select('.column_fix_wrap')
# id값을 넣어줄 때는 # 뒤에 적어 준다.
somedata3 = soup.select('#NM_THEMECAST_CONTENTS_CONTAINER')
* 클래스가 여러 개일 경우에는 find()는 스페이스바로 구분,
select()는 .클래스1.클래스2 이런 식으로 .으로 구분하여 이어 적어준다.
태그 이름들이 다 비슷해서 특정지을 수 없을 때는?
find()를 두 번 사용했던 것처럼 상위 태그 안의 하위 태그를 지정하여 주고 싶을 때는,
스페이스바(' ')로 띄워서 select()를 사용해 준다.
이 때, 상위/하위인지만 일치하면 되고, 그 사이에 들어오는 모든 태그를 반드시 명시할 필요는 없다.
그 사이에 뭐가 있든.. 상위->하위 어딘가에 있기만 하면 됨!
import requests as req
from bs4 import BeautifulSoup as b
res = req.get('https://www.naver.com/')
soup = b(res.content,'html.parser')
somedata = soup.select_one('div a')
somedata.get_text() # ' 뉴스스탠드 바로가기 '
상위/하위뿐만 아니라 그 사이에 들어오는 모든 태그를 정확히 지정할 때는 꺽쇠('>')를 사용한다.
import requests as req
from bs4 import BeautifulSoup as b
res = req.get('https://www.naver.com/')
soup = b(res.content,'html.parser')
somedata = soup.select('button > span')
# 반드시 button 태그 바로 아래에 span 태그를 가진 데이터를 추출한다.
for something in somedata:
print(something.get_text())
모든 것들을 응용하면..
import requests as req
from bs4 import BeautifulSoup as b
res = req.get('https://www.naver.com/')
soup = b(res.content,'html.parser')
#div태그 내에 id값이 NM_..영역 하위의, h2태그를 가지고 class명이 blind인 부분을 추출한다.
somedata = soup.select_one('div#NM_THEMECAST_CONTENTS_CONTAINER h2.blind')
somedata.get_text() # '주제별 캐스트'
이런 것도 가능하다.
'기초 > Python' 카테고리의 다른 글
크롤링 기초 (1) : 기본 용법 / find, find_all, get_text, string (0) | 2022.01.10 |
---|---|
파이썬 기초(9) : 라이브러리 (0) | 2022.01.04 |
파이썬 기초(8) : 객체와 클래스 (0) | 2022.01.03 |
댓글()