2013-07-26 3 views
2

중첩 된 태그에서 번호를 얻고 싶습니다. 어떻게하면 좋을까요?beautifulSoup를 사용하여 스팬에 액세스하는 방법은 무엇입니까?

내 코드는 다음을 출력하지만, 난 안 전체 두 줄의 # 40을 좀하고 싶습니다 :이 오류가

from bs4 import BeautifulSoup 
import requests 
import csv 

site = "http://www.usnews.com/education/best-high-schools/national-rankings/page+2" 

fields = ['national_rank','school','address','school_page','medal','ratio','size_desc','students','teachers'] 

r = requests.get(site) 
html_source = r.text 
soup = BeautifulSoup(html_source) 

table = soup.find('table')  
rows_list = []  

for row in table.find_all('tr'):                                                            

    d = dict() 

    d['national_rank'] = row.find("span", 'rankings-score') 
    print d['national_rank'] 

: 여기

<span class="rankings-score"> 
<span>#40</span> 

내 코드입니다 :

:

AttributeError: 'NoneType' object has no attribute 'span' 

나는 이것을 할 때

답변

5

액세스 중첩 된 범위의 텍스트 : 당신은 row.find("span", 'rankings-score') 실제로 뭔가를 찾을 수 있는지 확인해야합니다

if d['national_rank'] is not None: 
    print d['national_rank'].span.text 

; 위의 테스트를 통해 이고 실제로는 <span>입니다.

+0

나를 이길 ... 나는'class _ = 'rankings-score'' 또는 동급이 아마도 원했을 것이라고 덧붙였다 ... 현재 아마 우연히 결과가 더 우연이다 ... –

+0

그래서 나는 시도했다. ('span', 'rankings-score'). 찾기 ('span'). 텍스트를 가져오고 AttributeError 가져 오기 : 'NoneType'객체의 'contents'속성이 없음 – goldisfine

+0

@ goldisfine : 일부 행은 그러한''를 가지지 않습니다. –

관련 문제