[Web Crawling] BeautifulSoup
HTML과 XML 파싱을 도와주는 라이브러리를 사용해서 response로 얻은 데이터를 정리하자.
- 이런 웹을 파싱하는 예제
BeautifulSoup
- HTML과 XML 파싱을 도와주는 라이브러리
import requests
from bs4 import BeautifulSoup as bs
url = r'https://crawlingstudy-dd3c9.web.app/01/'
response = requests.get(url)
soup = bs(response.text,"html.parser")
result = soup.find("title")
print(result)
# 결과 : <title>크롤링 연습사이트 01</title>
find / find_all
- soup 객체에서 find / find_all에 원하는 태그를 입력하면 가져올 수 있다.
- find는 가장 상단부터 가져온다. limit=개수를 입력해서 지정할 수 있다.
- find_all은 전부
import requests
from bs4 import BeautifulSoup as bs
url = r'https://crawlingstudy-dd3c9.web.app/01/'
response = requests.get(url)
soup = bs(response.text,"html.parser")
p_tags = soup.find_all('p')
for p_tag in p_tags:
print(p_tag)
print()
# 결과
<p id="hello">
이탈리아 요리의 시작은 기원전 4세기로 거슬러 올라갈 수 있다. 대항해시대를 거치면서 아메리카 대륙에서 감자·토마토·후추·옥수수 등이 유입되어 그 종류와 풍미가 다양해졌고 현대에 이르러서는 피자와 파스타 등 많은 이탈리아 요리가 널리 퍼지게 되었다.
</p>
<p id="cook">
전통적인 요리법이나 양식은 상당한 차이가 있지만, 이탈리아 요리는 다른 국가의 요리 문화에서 다양한 영감을 줄 만큼 다양하고 혁신적인 것으로 평가되고 있다. 각 지방마다 고유의 특색이 있어 그 양식도 다양하지만 크게 북부와 남부로 나눌 수 있다. 다른 나라와 국경을 맞대고 있던 북부 지방은 산업화되어 경제적으로 풍족하고 농업이 발달해 쌀이 풍부해 유제품이 다양한 반면 경제적으로 침체되었던 남부 지방은 올리브와 토마토, 모차렐라 치즈가 유명하고 특별히 해산물을 활용한 요리가 많다. 식재료와 치즈 등의 차이는 파스타의 종류와 소스와 수프 등도 다름을 의미한다.
</p>
find / find_all 옵션값 지정
- id나 class 옵션명을 지정해줘서 원하는 데이터만 가져올 수 있다.
- attr={}를 전달해서 값을 가져온다.
import requests
from bs4 import BeautifulSoup as bs
url = r'https://crawlingstudy-dd3c9.web.app/01/'
response = requests.get(url)
soup = bs(response.text,"html.parser")
th_tags = soup.find_all('th', attrs={'class':'tablehead'})
for th_tag in th_tags:
print(th_tag)
# 결과
<th class="tablehead">이름</th>
<th class="tablehead">나이</th>
attrs 전달해서 특정 데이터
import requests
from bs4 import BeautifulSoup as bs
url = r'https://crawlingstudy-dd3c9.web.app/01/'
response = requests.get(url)
soup = bs(response.text,"html.parser")
th_tags = soup.find_all('th', attrs={'class':'tablehead'})
for th_tag in th_tags:
print(th_tag)
print(th_tag.text)
# 결과
<th class="tablehead">이름</th>
이름
<th class="tablehead">나이</th>
나이
- 파싱한 내용을 text로 접근해서 태그를 제거하고 내용만 추출할 수 있다.
메서드 체인으로 데이터 가져오기
url = r'https://crawlingstudy-dd3c9.web.app/01/'
response = requests.get(url)
soup = bs(response.text,"html.parser")
result = soup.find('table').find('tbody')
print(result)
<tbody>
<tr>
<td>이몽룡</td>
<td>34</td>
</tr>
<tr>
<td>홍길동</td>
<td>23</td>
</tr>
</tbody>
- soup.find로 얻은 객체에서도 똑같이 메서드를 사용할 수 있다.
- 메서드 체인으로 결과 가져오기.
수집한 데이터에서 attrs로 데이터 찾기
import requests
from bs4 import BeautifulSoup as bs
url = r'https://crawlingstudy-dd3c9.web.app/01/'
response = requests.get(url)
soup = bs(response.text,"html.parser")
result = soup.find('a')
print(result.attrs)
print(result.attrs['href'])
# 결과
{'href': '01.html'}
01.html
- 결과로 얻은 객체에 attrs가 존재하면(디폴트는 비어있다) key를 입력해서 데이터를 가져올 수 있다
'Data Analysis > Data Mining' 카테고리의 다른 글
[Web Crawling] 인피니티 스크롤 크롤링 (0) | 2024.11.16 |
---|---|
[Web Crawling] 비동기 사이트 (0) | 2024.11.16 |
[Web Crawling] CSS 셀렉터 (0) | 2024.11.16 |
[Web Crawling] Requests (0) | 2024.11.14 |
[Web Crawling] HTML 구조 (0) | 2024.11.14 |
[Web Crawling] HTTP 통신 방식 (0) | 2024.11.14 |
[Web Crawling] 웹 구조 (0) | 2024.11.07 |
댓글