2012-09-09 5 views
2

저는 웹 페이지를 긁어 내기 위해 파이썬에서 BeautifulSoup로 작업하고 있습니다. 문제의 HTML은 아래와 같습니다.beautifulsoup 파이썬으로 내용이없는 태그 테스트

<td><a href="blah.html>blahblah</a></td> 
<td>line2</td> 
<td></td> 

나는 td 태그의 내용을 가져 가고 싶습니다. 그래서 첫 번째 td는 "blahblah"텍스트가 필요하고 다음 td는 내용이 없기 때문에 "line2"와 마지막 td "blank"를 쓰고 싶습니다.

내 코드는 다음과 같습니다 - 내가 BeautifulSoup로 함께 일하고 참고 -

elif each_td.contents[0] is None: 
IndexError: list index out of range 

-

row = [] 
for each_td in td:       
    link = each_td.find_all('a')             
    if link: 
     row.append(link[0].contents[0]) 
     row.append(link[0]['href']) 
    elif each_td.contents[0] is None: 
     row.append('blank')     
    else: 
     row.append(each_td.contents[0]) 
print row 

그러나 실행에, 내가 오류가

.

"no-content-td"와 weite를 적절하게 테스트하려면 어떻게해야합니까? "...가 없음"이 작동하지 않는 이유는 무엇입니까?

답변

4

.text을 사용하면 텍스트를 가져올 수 있습니다.

row = [] 
for each_td in td: 
    row.append(each_td.text) 
print row 
+0

감사합니다! 효과가있었습니다. – user1644208

6

누가 '내용'에 항상 하나 이상의 요소가 있다고 했습니까? 분명히 '내용'에는 요소가 없으므로이 오류가 발생합니다.

더 적절한 점검은 다음과 같습니다

if each_td.contents: 

또는

if len(each_td.contents) > 0: 

하지만 당신의 preassumption 그냥 잘못된 것입니다.

-1

예외를 처리 할 수 ​​있습니다. 아래 코드는

try: 
    row.append(each_td.contents[0]) 
except IndexError: 
    //do what is required if it is empty ...