[웹크롤링] 인터넷에서 캐릭터 정보를 가져오자 - 던파모아 활용(3)
from urllib import parse
from urllib.request import urlopen
from bs4 import BeautifulSoup
ADV_SEARCH = "https://dunfamoa.com/characters/adventure?search="
HOMEPAGE_URL = "https://dunfamoa.com" #모험단 검색을 위해 추가한 던파모아 홈페이지의 URL
def urlEncoding(keyword_):
keyword = parse.quote(keyword_)
return keyword
if __name__ == "__main__":
adv_keyword = urlEncoding("말걸면")
source_code = urlopen(ADV_SEARCH + adv_keyword).read()
#-----------------던파모아 활용(2)--------------------#
지난 코드에 이어 진행하도록 하자.
일단 지난 코드에 HOMEPAGE_URL을 추가하고
BeautifulSoup는 우리가 원하는 URL을 탐색(파싱)하기 위해 import하였다.
adv_url = []
soup = BeautifulSoup(source_code, "html.parser")
tag_a = soup.find('div', class_='Wrapper-sc-1noqpd4-1 gfctoN').find_all('a')
우리는 소스 코드 내에서 <a href="주소">가 포함된 모든 문장을 찾을 것이고,
그 문장에서 모험단을 검색하기 위한 주소만을 추출하여 저장할 것이다(adv_url = []).
먼저, source_code에 저장한 문자열로 이루어진 html 정보에 대해 문자열로 파싱한다.
그리고 우리는 지난 글에서 특정 모험단으로 링크시켜주는 주소가
<div class='Wrapper-sc-1noqpd4-1 gfctoN'> 내 존재함을 확인하였다.
그렇기에 우리는 'div'(태그 이름)와 'Wrapper-sc-1noqpd4-1 gfctoN'(속성(attr) 값)을 특정하여 찾는다(find()).
우리는 주소가 <a href>에 존재함을 알고 있기 때문에 'a'를 특정하여 해당 태그를 모두 찾는다.(find_all())
위 사진은 해당 부분(코드 상에서 tag_a에 초기화한 것)을 디버깅한 것으로,
우리가 찾고자 하는 내용이 들어있음을 확인할 수 있다.
<div class="Wrapper-sc-jrfk9d-0 bykzDt">
<a href="/adventures/
%EB%A7%90%EA%B1%B8%EB%A9%B4%ED%81%B0%EC%9D%BC%EB%82%98%EC%9A%94"
class="Row-sc-jrfk9d-1 hiKazl">...</a>
<a href="/adventures/
%EB%A7%90%EA%B1%B8%EB%A9%B4%EB%92%A4%EC%A7%84%EB%8B%A4"
class="Row-sc-jrfk9d-1 hiKazl">...</a>
<a href="/adventures/
%EB%A7%90%EA%B1%B8%EB%A9%B4"
class="Row-sc-jrfk9d-1 hiKazl">...</a>
<a href="/adventures/
%EB%A7%90%EA%B1%B8%EB%A9%B4%EA%B3%A0%EB%B0%B1%EA%B0%88%EA%B9%80"
class="Row-sc-jrfk9d-1 hiKazl">...</a>
html 코드는 앞선 글의 내용을 보충하기 위해 첨부하였다.
<href>속성을 제외하고도 <class> 속성이 존재한다.
for value_a in tag_a:
if 'href' in value_a.attrs and 'class' in value_a.attrs:
if value_a.attrs['class'] == ["Row-sc-jrfk9d-1", "hiKazl"]:
adv_url.append(HOMEPAGE_URL + value_a.attrs['href'])
print(HOMEPAGE_URL + value_a.attrs['href'])
우리는 계속해서 'a'라는 태그, 'href'라는 속성에 주소가 존재함을 인지하고 있다.
위의 디버깅 사진과 같이 value_a의 속성에(value_a.attrs)
'href'와 'class' 속성 두 개가 있는 것을 확인할 수 있다.
우리는 이제 for문을 사용하여 저장된 각각의 태그 내에서(tag_a)
'href'와 'class' 속성 두 개가 모두 존재하는 태그만을 확인할 것이고
그 태그의 'class' 속성이 우리가 찾으려는
태그의 속성값(["Row-sc-jrfk9d-1", "hiKazl"])과 동일한지 재차 확인하여
맞다면 그 주소를 추출하는 작업을 진행한다.
상기 과정을 통하여 우리는 던파모아 사이트에
"말걸면"이라는 검색어를 입력하여 나오는 계정들을 확인할 수 있는 주소를 확보할 수 있다.
from urllib import parse
from urllib.request import urlopen
from bs4 import BeautifulSoup
ADV_SEARCH = "https://dunfamoa.com/characters/adventure?search="
HOMEPAGE_URL = "https://dunfamoa.com"
def urlEncoding(keyword_):
keyword = parse.quote(keyword_)
return keyword
if __name__ == "__main__":
adv_url = []
adv_keyword = urlEncoding("말걸면")
source_code = urlopen(ADV_SEARCH + adv_keyword).read()
soup = BeautifulSoup(source_code, "html.parser")
tag_a = soup.find('div', class_='Wrapper-sc-1noqpd4-1 gfctoN').find_all('a')
for value_a in tag_a:
if 'href' in value_a.attrs and 'class' in value_a.attrs:
if value_a.attrs['class'] == ["Row-sc-jrfk9d-1", "hiKazl"]:
adv_url.append(HOMEPAGE_URL + value_a.attrs['href'])
print(HOMEPAGE_URL + value_a.attrs['href'])
파이썬 코드 전문
다음은 모험단 내 존재하는 캐릭터 이름을 추출해보자.