bs

Jinhyeon Son·2020년 4월 14일
0

정리

목록 보기
11/17

Beautiful Soup

정적 페이지의 HTML, XML에서 원하는 데이터를 추출하는데 사용하는 파이썬 라이브러리

bs 객체안에서 각 태그는 객체처럼 표현되며 속성값으로 html속성값들을 갖는다

메소드

init

  • html = requests.get(TARGET_URL).text

    	TARGET_URL에 http get request를 보내 html파일을 받아온다
  • soup = BeautifulSoup(html, 'html.parser')

    	BeautifulSoup객체를 통해 html파일을 파싱한다

bs 객체

위에서 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로 설정될 경우 하위 태그가 아닌 자손 태그만 순회한다

0개의 댓글