Python Beautiful Soup 모듈 을 이용 하여 대상 생 성 상세 설명

설치 하 다.
pip 를 통 해 Beautiful Soup 모듈 설치:pip install beautifulsoup4 .
또한 PyCharm IDE 를 사용 해 코드 를 쓸 수도 있 고,PyCharm 의 Preferences 에서 Project 를 찾 아 안에서 Beautiful Soup 모듈 을 검색 해 설치 하면 된다.
BeautifulSoup 대상 만 들 기
Beautiful Soup 모듈 은 웹 페이지 에서 데 이 터 를 얻 기 위해 광범 위 하 게 사용 된다.웹 페이지 의 모든 링크 나 탭 의 내용 등 HTML/XML 문서 에서 Beautiful Soup 모듈 을 사용 하여 모든 데 이 터 를 추출 할 수 있 습 니 다.
이 를 실현 하기 위해 뷰 티 풀 수프 는 다양한 대상 과 방법 을 제공한다.모든 HTML/XML 문 서 는 서로 다른 Beautiful Soup 대상 으로 바 뀔 수 있 습 니 다.이 대상 들 은 서로 다른 속성 과 방법 을 가지 고 있 습 니 다.우 리 는 그 중에서 필요 한 데 이 터 를 추출 할 수 있 습 니 다.
Beautiful Soup 에는 다음 과 같은 세 가지 대상 이 있 습 니 다.
  • BeautifulSoup
  • Tag
  • NavigableString
  • BeautifulSoup 대상 만 들 기
    Beautiful Soup 대상 을 만 드 는 것 은 모든 Beautiful Soup 프로젝트 의 출발점 입 니 다.
    BeautifulSoup 은 기계 의 파일 이나 웹 페이지 와 같은 문자열 이나 클래스 파일 대상(file-like object)을 전송 할 수 있 습 니 다.
    문자열 로 BeautifulSoup 대상 만 들 기
    BeautifulSoup 의 구조 기 에서 문자열 을 전달 하여 대상 을 만 듭 니 다.
    
    helloworld = '<p>Hello World</p>'
    soup_string = BeautifulSoup(helloworld)
    print soup_string 
    <html><body><p>Hello World</p></body></html>
    클래스 파일 대상 을 통 해 BeautifulSoup 대상 만 들 기
    BeautifulSoup 의 구조 기 에서 클래스 파일 대상(file-like object)을 전달 하여 대상 을 만 듭 니 다.이것 은 온라인 홈 페이지 를 분석 할 때 매우 유용 하 다.
    
    url = "http://www.glumes.com"
    page = urllib2.urlopen(url)
    soup = BeautifulSoup(page)
    print soup
    클래스 파일 대상 을 전달 하 는 것 외 에 로 컬 파일 대상 을 BeautifulSoup 의 구조 기 에 전달 하여 대상 을 만 들 수 있 습 니 다.
    
    with open('foo.html','r') as foo_file :
     soup_foo = BeautifulSoup(foo_file)
    print soup_foo
    XML 분석 을 위 한 BeautifulSoup 대상 만 들 기
    Beautiful Soup 모듈 역시 XML 을 해석 할 수 있 습 니 다.
    Beautiful Soup 대상 을 만 들 때 Beautiful Soup 모듈 은 HTML/XML 트 리 를 만 들 기 위해 적당 한 TreeBuilder 클래스 를 선택 합 니 다.기본적으로 HTML TreeBuilder 대상 을 선택 하면 기본 HTML 해상도 기 를 사용 하여 HTML 구조 트 리 를 만 듭 니 다.위의 코드 에서 문자열 로 BeautifulSoup 대상 을 만 드 는 것 은 HTML 트 리 구조 로 해석 하 는 것 입 니 다.
    만약 우리 가 Beautiful Soup 모듈 에서 입력 한 내용 을 XML 형식 으로 해석 하려 면 Beautiful Soup 구조 기 에서 사용 할 features 인 자 를 정확하게 지정 해 야 합 니 다.특정한 features 인 자 를 통 해 Beautiful Soup 은 우리 가 원 하 는 특징 을 충족 시 키 기 위해 가장 적합 한 TreeBuilder 클래스 를 선택 할 것 입 니 다.
    features 매개 변수 이해
    모든 TreeBuilder 는 사용 하 는 해상도 에 따라 특징 이 다 를 것 입 니 다.따라서 입력 한 내용 은 구조 기 에 전 달 된 features 파라미터 에 따라 결과 가 다 를 수 있 습 니 다.
    Beautiful Soup 모듈 에서 TreeBuilder 가 현재 사용 하고 있 는 분석 기 는 다음 과 같 습 니 다.
  • lxml
  • html5lib
  • html.parser
  • BeautifulSoup 구조 기의 features 인 자 는 문자열 목록 이나 문자열 값 을 받 아들 일 수 있 습 니 다.
    현재 모든 TreeBuilder 가 지원 하 는 features 파라미터 와 해석 기 는 다음 표 와 같 습 니 다.
    Features
    TreeBuilder
    Parser
    [‘lxml','html','fast','permissive']
    LXMLTreeBuilder
    lxml
    [‘html','html5lib','permissive','strict','html5′]
    HTML5TreeBuilder
    html5lib
    [‘html','strict','html.parser']
    HTMLParserTreeBuilder
    html.parser
    [‘xml','lxml','permissive','fast']
    LXMLTreeBuilderForXML
    lxml
    지정 한 feature 인자 에 따라 Beautiful Soup 은 가장 적합 한 TreeBuilder 클래스 를 선택 합 니 다.대응 하 는 해상도 기 를 지정 할 때 다음 과 같은 오류 메시지 가 나타 나 면 해당 하 는 해상도 기 를 설치 해 야 할 수도 있 습 니 다.
    
    bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: html5lib. 
    Do you need to install a parser library?
    HTML 문서 의 경우 TreeBuilder 를 선택 하 는 순 서 는 해상도 기 를 기반 으로 한 우선 순위 입 니 다.위 표 와 같은 우선 순위 입 니 다.먼저 lxml 이 고,그 다음은 html 5lib 이 며,마지막 은 html.parser 입 니 다.예 를 들 어 html 문자열 을 feature 매개 변수 로 선택 하면 lxml 해상도 기 를 사용 할 수 있 으 면 Beautiful Soup 모듈 은 LXMLtreeBuilder 를 선택 합 니 다.lxml 을 사용 할 수 없 으 면 html 5lib 해상도 기 에 따라 HTML 5TreeBuilder 를 선택 합 니 다.사용 할 수 없 으 면 html.parser 에 따라 HTML Parser TreeBuilder 를 선택 합 니 다.
    XML 에 대해 서 는 lxml 이 유일한 해석 기 이기 때문에 LXMLtreeBuilder ForXML 은 항상 선택 된다.
    따라서 XML 에 Beautiful Soup 대상 을 만 드 는 코드 는 다음 과 같 습 니 다.
    
    helloworld = '<p>Hello World</p>'
    soup_string = BeautifulSoup(helloworld,features="xml")
    print soup_string
    입력 한 결과 도 XML 형식의 파일 입 니 다.
    Beautiful Soup 대상 을 만 들 때 더 좋 은 실천 은 지정 해상도 입 니 다.이것 은 서로 다른 해석 기 가 해석 한 결과 내용 이 크게 다 르 기 때문이다.특히 우리 의 HTML 문서 내용 이 불법 일 때 결과 가 더욱 뚜렷 하기 때문이다.
    우리 가 BeautifulSoup 대상 을 만 들 었 을 때 Tag 와 NavigableString 대상 도 만 들 었 습 니 다.
    태그 개체 만 들 기
    우 리 는 BeautifulSoup 대상 에서 Tag 대상,즉 HTML/XML 의 라벨 을 얻 을 수 있다.
    다음 HTML 코드 와 같 습 니 다.
    
    #!/usr/bin/python
    # -*- coding:utf-8 -*-
    from bs4 import BeautifulSoup
    html_atag = """
     <html>
     <body>
     <p>Test html a tag example</p>
     <a href="http://www.glumes.com'>Home</a>
     <a href="http;//www.glumes.com/index.html'>Blog</a>
     </body>
     <html>
     """
    soup = BeautifulSoup(html_atag,'html.parser')
    atag = soup.a
    print type(atag)
    print atag
    결과 에서 알 수 있 듯 이 atag 의 유형 은입 니 다. 。soup.a 의 결 과 는 HTML 문서 의 첫 번 째태그 입 니 다.HTML/XML 태그 대상 은 이름과 속성 을 가지 고 있 습 니 다.이름 은 탭 의 이름 입 니 다.예 를 들 어 탭의 이름 은 a 입 니 다.속성 은 태그 의 class,id,style 등 입 니 다.태그 대상 은 HTML 태그 의 이름과 속성 을 얻 을 수 있 습 니 다.태그 대상 의 이름.name 방식 으로 태그 대상 의 이름 을 얻 습 니 다. tagname = atag.name print tagname 태그 대상 의 이름 도 바 꿀 수 있 습 니 다. atag.name = 'p'이렇게 해서 위의 HTML 문서 의 첫 번 째태그 이름 을태그 로 바 꾸 었 습 니 다.태그 대상 의 속성HTML 페이지 에서 라벨 은 class,id,style 등 서로 다른 속성 이 있 을 수 있 습 니 다.태그 대상 은 탭 의 속성 에 사전 으로 접근 할 수 있 습 니 다. atag = soup_atag.a print atag .attrs 방식 으로 접근 할 수 있 습 니 다.그러면 모든 속성 내용 을 인쇄 할 수 있 습 니 다. print atag.attrs {'href': u'http://www.glumes.com'}NavigableString 대상 만 들 기NavigableString 대상 은 HTML 이나 XML 탭 의 텍스트 내용 을 가지 고 있 습 니 다.이것 은 유 니 코드 인 코딩 문자열 입 니 다.우 리 는.string 의 방식 을 통 해 라벨 의 본문 내용 을 얻 을 수 있다. navi = atag.string print type(navi) print navi.string작은 매듭코드 요약 은 다음 과 같 습 니 다.BeautifulSoup soup = BeautifulSoup(String) soup = BeautifulSoup(String,features=”xml”)Tag tag = soup.tag tag.name tag[‘attribute']NavigableString soup.tag.string 총결산이상 은 Python 이 Beautiful Soup 모듈 을 사용 하여 대상 을 만 드 는 것 에 관 한 모든 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글로 주 고 받 으 세 요.

    좋은 웹페이지 즐겨찾기