Development/Python
크롤링 기초 : BeautifulSoup
nissyy
2022. 7. 26. 16:33
1) 인스턴스 생성
# BeautifulSoup 인스턴스 생성. 두번째 매개변수는 분석할 분석기(parser)의 종류.
soup = BeautifulSoup(html, 'html.parser')
soup = BeautifulSoup( 가져올 html 문서, 문서를 분석할 분석기)
2) BeautifulSoup의 'select'
위에서 인스턴스의 이름을 soup으로 지정해줘서, soup.함수명으로 정보를 가져온다.
이때 사용되는 것이 select... 그러니까 soup.select()와 같은 방식으로 사용을 하는 것.
soup.select()를 통해서 다음과 같이 정보를 가져온다.
- soup.select('태그명') : 태그를 입력으로 사용할 경우
- soup.select('.클래스명') : 클래스를 입력으로 사용할 경우
- soup.select('#아이디') : ID를 입력으로 사용할 경우
- soup.select('상위태그명 하위태그명') : 자손 관계 (어떤 태그 내부에 있는 모든 태그를 자손이라고 함)
- soup.select('상위태그명 > 하위태그명') : 자식 관계 (어떤 태그 내부에 있는 태그 중 바로 한 단계 아래에 있는 태그를 자식이라고 함)
- class 앞에는 .을, 아이디 앞에는 #를 붙여주는 게 규칙.
- 예를 들어, 특정 아이디 안에 있는 특정 class 값을 가진 대상을 불러오고 싶다! 하면, '#id .class' < 요로케 호출!
- cf) soup.태그명
해당 태그 포함, 그 태그가 끝날 때까지의 문장을 가지고 온다. 다만 해당 태그가 여러개라면 첫번째 태그만 가지고 온다. - cf) soup.태그명.get('속성명')
get('속성명')을 통하여서 해당 태그 안의 속성값을 가지고 온다.
예시
html = '''
<html>
<head>
</head>
<body>
<h1> 장바구니
<p id='clothes' class='name' title='라운드티'> 라운드티
<span class = 'number'> 25 </span>
<span class = 'price'> 29000 </span>
<span class = 'menu'> 의류</span>
<a href = 'http://www.naver.com'> 바로가기 </a>
</p>
<p id='watch' class='name' title='시계'> 시계
<span class = 'number'> 28 </span>
<span class = 'price'> 32000 </span>
<span class = 'menu'> 액세서리 </span>
<a href = 'http://www.facebook.com'> 바로가기 </a>
</p>
</h1>
</body>
</html>
'''
""29000""을 가져오고 싶다면?:
p라는 태그의 clothes라는 id를 가진 요소들 중에서, price라는 class이름을 가진 span 태그를 가지고 와라!