beautifulsoup4 이용한 딕셔너리 저장
조회수 808회
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)
댓글 입력