python-beautifulsoup를 이용한 웹 스크래핑 2
url의 한글부분을 퍼센트 인코딩하는 방법
from urllib import parse
url_hangul = parse.quote("제주도이브이")
#url_hangul에 %EC%A0%9C%EC%A3%BC%EB%8F%84%EC%9D%B4%EB%B8%8C%EC%9D%B4 값 저장
url에서 한글로 작성된 부분(e.g “http://https://lostark.game.onstove.com/Profile/Character/제주도이브이” 에서 제주도이브이 부분)을 퍼센트 인코딩해준다.
만들어놓은 soup에서 데이터 추출하기
soup에는 다양한 메소드를 이용하여 내가 원하는 문자열 데이터를 얻을 수 있다.
추출하고 싶은 데이터가 있는 html문서를 예시로 하나 들어보겠다.
<body>
<div class="attack">공격할 대상을 선택</div>
<div class="shield">
<span>실드를 사용하여 방어</span>
<span>방어력+30</span>
<div class = "gold">
<span>골드 30만큼 소모</span>
</div>
</div>
</body>
def Scraping():
url = "url주소입력"
headers = {"user agent 입력"} # https://www.whatismybrowser.com/detect/what-is-my-user-agent 에서 확인 가능
res = requests.get(url, headers=headers) #res에 html문서 저장
res.raise_for_status() # 응답코드200(정상)과 다른 값이 나오면 HTTPError 발생
soup = BeautifulSoup(res.text, "lxml")
text = soup.find("div", class_="attack")
# e.g) "<div class="attack">공격할 대상을 선택<div>"
text = text.get_text()
# e.g) "공격할 대상을 선택"
soup에 .find() 메소드를 tag만 지정하거나 tag의 클래스명까지 지정하면 html문서를 위에서 아래로 탐색하다 첫번째로 조건에 부합하는 문자열을 돌려준다. 이때 tag를 포함한 문자열 전체를 돌려주기 때문에 tag를 제외한 문자열을 얻고 싶다면 .get_text() 메소드를 이용하면 된다.
texts = soup.find_all("span")
# tag가 span인 모든 문자열을 soup리스트 형태로 texts에 저장
# e.g) [<span>실드를 사용하여 방어</span>, <span>방어력+30</span>, <span>골드 30만큼 소모</span>]
text_list = []
for text in texts
text_list.append(text.get_text())
# text_list에 tag를 제외한 문자열을 저장
# e.g) [실드를 사용하여 방어, 방어력+30, 골드 30만큼 소모]
soup에 .find_all()메소드를 tag만 지정하거나 tag의 클래스명까지 지정하면 html문서 전체에서 조건에 부합하는 문자열을 돌려준다. 이때 tag를 제외한 문자열을 얻고 싶다면 find_all의 return값이 soup list형태 이므로 list의 원소를 for문을 이용해 가져온다음 get_text()메소드를 사용해주면 된다.
text = soup.find("div", class_="gold").find("span")
# class가 "gold"인 div tag를 가지고 있는 코드안에 tag가 span인 문자열을 저장
# e.g) <span>골드 30만큼 소모</span>
text = text.get_text()
# text에 tag를 제외한 문자열을 저장
# e.g) "골드 30만큼 소모"
find 메소드를 여러번 사용할 수 있다. 또한 find메소드를 사용하다 마지막에 find_all메소드를 사용할 수도 있다.
이 외에도 beautifulsoup에는 다양한 메소드들이 있다. 한글로 된 뷰티플 수프 문서에 예시와 함께 다양한 메소드와 메소드사용법을 알려주고 있다.
또한 구글은 모든 것을 알려준다. 구글에 쳐도 다양한 정보가 나온다.
항상 구글을 사부님으로 모시자.