beautifulsoup4 이용한 딕셔너리 저장

조회수 806회
from urllib.request import urlopen
from bs4 import BeautifulSoup
response = urlopen("https://music.naver.com/listen/top100.nhn?domain=TOTAL&duration=1d")
b_html = response.read()
s_html = b_html.decode()
bs = BeautifulSoup(s_html,"html.parser")
mugic_dictionary={}

for x in bs.find('tbody').findAll('tr'):
    ranking = x.find(attrs = {'class' : 'ranking'})
    name = x.find(attrs = {'class' : 'name'}).find(attrs = {'class' : 'ellipsis'})
    if name != None and ranking != None:
        mugic_dictionary[ranking.text] = name.text
print(mugic_dictionary)

이 유형을 가지고 https://ko.wikipedia.org/wiki/%EC%9D%B8%EA%B5%AC%EC%88%9C_%EB%82%98%EB%9D%BC_%EB%AA%A9%EB%A1%9D 해당 사이트에 국가와 인구수를 값으로 나오게 하는 코드로 수정하고 싶을 경우에 어느 부분을 수정해야 하나요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 브라우저 개발자 도구 로 목표 사이트 분석을 먼저 하셔야 합니다.

    해당 사이트는 tbody 태그를 가진 element가 두개인데 목표 tbody가 첫번째이므로 find('tbody')로 해당 테이블을 바로 찾을수 있습니다.

    주의하실점은, tbody 찾는 코드가 좀 허술하여, 목표사이트 구조가 변경되어 목표테이블앞에 다른 테이블이 생길경우 엉뚱한 데이타를 가져올수 있으므로 사이트 구조가 변경되더라도 해당 테이블을 확실히 가져올 수 있도록 위코드는 좀더 보강하는게 좋습니다.

    방법은 bs4 사이트 내용을 참조하시면 됩니다.

    예제 코드를 최대한 훼손하지 않고 변형하면 다음과 같습니다. mugic_dictonary 는 적당한 이름으로 바꾸시면 좋을것 같네요.

    from urllib.request import urlopen
    from bs4 import BeautifulSoup
    response = urlopen("https://ko.wikipedia.org/wiki/%EC%9D%B8%EA%B5%AC%EC%88%9C_%EB%82%98%EB%9D%BC_%EB%AA%A9%EB%A1%9D")
    b_html = response.read()
    s_html = b_html.decode()
    bs = BeautifulSoup(s_html,"html.parser")
    mugic_dictionary={}
    
    for x in bs.find('tbody').findAll('tr'):
        line_values = x.findAll('td')
        if line_values:
            name = line_values[0].get_text()
            population = line_values[1].get_text().replace(',', '')
            if name and population:
                mugic_dictionary[name] = int(population)
    print(mugic_dictionary)
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)