항해99
beautiful soup 4 : <html> 로부터 파싱하여 도출된 리스트는 또다른 리스트로 파싱되지 않는다.
가문비7
2023. 3. 22. 23:22
문제점
bs4로 곡순위 웹페이지를 파싱했고, 아래 코드로 <tr> 들이 모인 리스트를 도출해 내었다. 하나의 <tr>에는 50위권 안에 들어온 노래의 정보가 담겨 있다.
trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
나는 그이후 또다시 아래 코드로 trs 라는 리스트로부터 노래제목을 도출해 내려고 하였다.
title = trs.select_one('td.info > a.title.ellipsis').text.strip();
하지만 그건 불가능했다.
시도해본 것
그래서 잘 작동하는 비슷한 코드를 살펴보았다. 결론은 list 로부터 노래제목을 도출하려면 반복문 안에 넣어서 하나하나 접근해야 한다는 것이었다. 아래 코드처럼 만들면 리스트 통째가 아닌 요소 하나하나에 접근하게 되므로 제목을 도출해 낼 수 있다.
for tr in trs:
title = tr.select_one('td.info > a.title.ellipsis').text.strip();
rank = tr.select_one('td.number').text[0:2].strip()
singer = tr.select_one('td.info > a.artist.ellipsis').text
print(rank, title, singer);