이 프로젝트는 파이썬을 이용하여 '크롤링'하는 방법을 배우기 위한 프로젝트로
HTML 소스를 가져오기 위한 Requests와 소스를 파싱(분석)하는 BeautifulSoup 라이브러리를 사용한다.
기존에 테크보이 워니 강의를 따라하면서 BeautifulSoup를 처음 사용했는데 너무 뜬금없어서 처음엔 당황했지만
이번 프로젝트를 따라 해보면서 이 라이브러리가 어떤 기능들을 수행하는지 알 수 있었다.
BeautifulSoup 라이브러리는 많은 기능이 있기 때문에 자세한 정보는 다음 링크에서 확인 가능하다.
: https://www.crummy.com/software/BeautifulSoup/bs4/doc/
Beautiful Soup Documentation — Beautiful Soup 4.9.0 documentation
Non-pretty printing If you just want a string, with no fancy formatting, you can call str() on a BeautifulSoup object, or on a Tag within it: str(soup) # ' I linked to example.com ' str(soup.a) # ' I linked to example.com ' The str() function returns a str
www.crummy.com
import requests
from bs4 import BeautifulSoup
# '범죄도시2'의 네이버 영화 리뷰 링크
url = "https://movie.naver.com/movie/bi/mi/review.naver?code=192608"
# html 소스 가져오기
res = requests.get(url)
# html 파싱
soup = BeautifulSoup(res.text, 'lxml') ## res.text는 requests Get 메서드를 사용해서 가져온 리소스이다.
# 리뷰 리스트
ul = soup.find('ul', class_="rvw_list_area")
lis = ul.find_all('li') ## 자료형 List
# 리뷰 제목 출력
count = 0
for li in lis:
count += 1
print(f"[{count}th] ", li.a.string)
- 해당 리뷰 페이지의 url을 get 메서드로 요청하여 리소스를 받는다.
- 받은 소스(res.text)를 BeautifulSoup 객체로 생성하여 분석(파싱)한다.
- 해당 소스는 HTML로 여러 태그들이 존재하며 리뷰에 해당하는 리스트는 <ul>과 class = "rvw_list_area"라는 속성을 가지고 있다.
- BeautifulSoup의 find, find_all 메서드를 사용하면 필요한 태그만 추출할 수 있다. (자료형 : List)
- 추출한 자료형 데이터를 for문을 반복하여 문자열로 출력한다.
※ Attribute Error 해결법
AttributeError Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_27452\4294833370.py in <module>
12 # 리뷰 리스트
13 ul = soup.find('ul', class_="rvw_list_area")
---> 14 lis = ul.find_all('li') ## 자료형 List
15
16 # 리뷰 제목 출력
AttributeError: 'NoneType' object has no attribute 'find_all'
url 값을 리뷰 페이지가 아닌 다른 페이지로 해버리면 위와 같이 AttributeError가 난다.
이는 find_all을 실행하는 객체 ul이 NoneType이라는 뜻이다.
리뷰 페이지가 아니면 <ul class = "rvw_list_area"> 라는 태그가 존재하지 않기 때문에
ul에는 None이 반환된다.
'Python > 파이썬 생활밀착형 프로젝트' 카테고리의 다른 글
2장, 나에게 카카오톡 메시지 보내기 프로젝트 (0) | 2022.06.28 |
---|---|
상대경로와 절대경로 (0) | 2022.06.26 |
1장, 연예인 사진 모으기 프로젝트 (0) | 2022.05.13 |