[Django]Django 개념 및 Python실습
[Django]개념 및 실습
BeautifulSoup4는 파이썬에서 웹 크롤링을 할 때 HTML 및 XML 데이터를 파싱하고 처리하는 강력한 라이브러리입니다. 다음은 프로젝트에서 유용하게 활용할 수 있는 주요 메서드와 예제들입니다:
- 설치:
- pip install beautifulsoup4
- 파서 선택:
- 기본 파서는 ‘html.parser’이며, ‘lxml’과 ‘html5lib’도 지원합니다. 각 파서는 성능과 유연성 측면에서 차이가 있습니다.
- 객체 구조:
- BeautifulSoup 객체: HTML/XML 문서를 파싱한 결과물입니다.
- Tag: HTML 태그를 나타냅니다.
- NavigableString: 태그 안의 문자열을 나타냅니다.
- Comment: HTML 주석을 나타냅니다.
- 주요 메서드와 활용법:
1) find() 및 find_all():
- 특정 태그를 찾을 때 사용합니다.
find()는 첫 번째로 일치하는 요소를 반환하고,find_all()은 모든 일치하는 요소를 리스트로 반환합니다.
soup.find('a') # 첫 번째 <a> 태그를 찾습니다.
soup.find_all('a') # 모든 <a> 태그를 리스트로 반환합니다.
2) select():
- CSS 선택자를 사용하여 요소를 찾습니다. 클래스, 아이디, 자식 선택자 등 CSS 문법을 활용할 수 있어 매우 유용합니다.
soup.select('div.classname') # 특정 클래스명을 가진 div 태그 찾기
soup.select('a#linkid') # 특정 id를 가진 a 태그 찾기
3) get_text():
- 태그 내의 텍스트만 추출할 때 사용됩니다. 특히 HTML 문서에서 내용을 크롤링할 때 매우 유용합니다.
soup.get_text() # 전체 문서에서 텍스트만 추출합니다.
soup.find('p').get_text() # 특정 태그의 텍스트만 추출합니다.
4) .attrs:
- 태그의 속성을 딕셔너리로 접근할 수 있습니다. 속성 값을 가져오거나 수정할 때 유용합니다.
tag = soup.find('a')
tag.attrs # 태그의 모든 속성을 딕셔너리로 반환
tag['href'] # 특정 속성 값 가져오기
5) decompose():
- 특정 태그와 그 하위 내용을 모두 제거할 때 사용됩니다. 웹 크롤링 시 불필요한 광고나 스크립트를 제거할 때 유용합니다.
soup.find('div', {'class': 'ad'}).decompose() # 광고 div 제거
6) contents 및 children:
- 태그 내부의 요소들을 리스트나 반복 가능한 객체로 가져올 수 있습니다.
soup.find('div').contents # 자식 요소들을 리스트로 반환
soup.find('div').children # 자식 요소들을 반복 가능한 객체로 반환
7) previous_sibling, next_sibling:
- 태그의 형제 요소를 탐색할 때 사용합니다.
soup.find('h2').next_sibling # 다음 형제 요소
soup.find('h2').previous_sibling # 이전 형제 요소
8) parent:
- 태그의 부모 요소에 접근할 수 있습니다.
soup.find('a').parent # a 태그의 부모 요소
- 프로젝트에서 활용 가능한 예시:
1) 웹 페이지의 모든 링크 추출:
links = [a['href'] for a in soup.find_all('a', href=True)]
2) 특정 기사 내용만 크롤링:
article = soup.find('div', {'class': 'article-content'}).get_text()
3) 특정 키워드가 포함된 텍스트만 추출:
results = soup.find_all(string=lambda text: '키워드' in text)
4) HTML 테이블을 데이터프레임으로 변환:
import pandas as pd
table = soup.find('table')
df = pd.read_html(str(table))[0]
이 내용들은 BeautifulSoup을 실제 프로젝트에 활용할 때 큰 도움이 될 것입니다. 웹 페이지에서 필요한 데이터를 추출하고, 불필요한 태그를 제거하며, 텍스트나 속성을 처리하는 데 필요한 주요 기능들을 다뤘습니다.
댓글남기기