정적 페이지의 HTML, XML에서 원하는 데이터를 추출하는데 사용하는 파이썬 라이브러리
bs 객체안에서 각 태그는 객체처럼 표현되며 속성값으로 html속성값들을 갖는다
html = requests.get(TARGET_URL
).text
TARGET_URL에 http get request를 보내 html파일을 받아온다
soup = BeautifulSoup(html, 'html.parser')
BeautifulSoup객체를 통해 html파일을 파싱한다
위에서 bs에서는 모든 태그는 객체로 표현된다고 했는데
이와 같은 맥락으로 태그의 자손 태그또한 객체의 속성값으로 표현된다
기본 속성
.name : 태그 이름
.text : 태그 내용
.string : 자손태그가 하나일때 그 이름
.strings : 자손태그가 여러개일때 이름들
['class'] : 클래스 속성 값
['id'] : id 속성값
.연산자
.head, .title, .body.p
.연산자를 통해 태그에 접근하면 그 이름에 해당하는 첫번째 태그만 얻는다
자손, 하위 연산자
.contents : 자손 선택자
.descendants : 하위 선택자
find_all() : 태그의 후손들을 찾아서 여과기에 부합하면 추출한다
soup.find_all("a") == soup("a")
soup.title.find_all(text=True) = soup.title(text=True)
문자열
soup.find_all('b')
하위 태그들중 문자열과 같은 이름을 가진 태그를 여과한다
정규 표현식
for tag in soup.find_all(re.compile("^b")):
하위 태그들 중 정규표현식에 해당하는 모든 태그를 순회한다
리스트
soup.find_all(["a", "b"])
하위 태그들 중 리스트에 존재하는 모든 태그를 찾는다
키워드 인자
soup.find_all(id='link2') : id가 link2인 태그
soup.find_all(href=re.compile("elsie"), id='link1') : 다음과같이 여러값들을 필터링 할수 있다
css 속성
find()유형의 메소드에 두번째 인자를 css 속성값 형태의 문자열로 건네주면
해당 문자열을 css 클래스 처럼 탐색한다
soup.find_all("a", "sister") : css 속성값에 sister가 포함되는 a태그
soup.find_all("p", class_="a") : class 속성값에 a가 포함되는 p태그
soup.find_all("li", {class : "abc"} : 다음과같이 넘겨줄수도 있다
(class의 경우 python예약어이므로 언더스코어)
객체 속성값
soup.find_all(text="Elsie") : 태그의 내용이 Elsie인 태그를 찾는다
limit 인자
soup.find_all("a", limit=2) : 최대 2개만 찾는다
recursive 인자
soup.html.find_all("title", recursive=False) : 기본은 True
False로 설정될 경우 하위 태그가 아닌 자손 태그만 순회한다