2011-07-26 11 views
-2

웹 페이지 장바구니에 데이터를 입력하고 합계를 확인하는 앱을 개발 중입니다. 그 잘 작동하지만, HTML 출력 구문 분석 문제가 있습니다.Python - BeautifulSoup가있는 HTML 구문 분석 오류

이전 토론; retrieving essential data from a webpage using python, BeautifulSoup을 사용하여 사용자의 문제를 해결하는 것이 좋습니다.

저는 파이썬 코드 중 일부를 빌려 MacOS 시스템에서 작동하도록했습니다. 그러나 우분투 설치 코드를 복사 할 때 이상한 오류가 나타납니다.

** (나는이 문제를보고 있어요) 강령 :

response = opener.open(req) 
html = response.read() 
doc = BeautifulSoup.BeautifulSoup(html) 

table = doc.find('tr', {'id':'carttablerow0'}) 

dump = [cell.getText().strip() for cell in table.findAll('td')] 

print "\n Catalog Number: %s \n Description: %s \n Price: %s\n" %(dump[0], dump[1], dump[5]) 

** (우분투 서버) 오류

Traceback (most recent call last): 
     File "./shopping_cart_checker.py", line 49, in <module> 
     dump = [cell.getText().strip() for cell in table.findAll('td')] 
    TypeError: 'NoneType' object is not callable 

내가 아래로 좁혀 것 같아요 getText()가 범인입니다. 그러나 이것이 우분투가 아닌 MacOS에서 왜 작동하는지 확신 할 수 없습니다.

제안 사항?

감사합니다.

@@@@@@@@@@@@@@@@@@@@@@@@@

안녕 얘들 아, 다양한 제안을 주셔서 감사합니다. 나는 그들 중 대부분을 시도했다. ("if cell"문을 코드에 통합했지만 여전히 작동하지 않는다.)

@ Ignacio Vazquez-Abrams - 여기에 내가 시도하고있는 HTML 사본이있다. 스트립 :.

http://pastebin.com/WdaeExnC

+0

HTML이 어떻게 보이는지 알 수 없습니다. –

+0

무슨 일이 일어나고 있든 'td'에는 텍스트가 없습니다. – agf

답변

0

가 Ubutntu에 아무 생각 작동하지 않는 이유에 관해서는 그러나이 시도 할 수 있습니다 :

dump = [(cell.getText() if cell.getText() else '').strip() for cell in table.findAll('td')] 
+0

또는 table.findAll ('td')]의 셀에 대해'dump = [(cell.getText() or '') .strip(). – MRAB

0

문제 될 것 같지 않습니다 코드를 읽지 만 HTML을 사용하면 코드를 변경하면됩니다. 이 :

dump = [cell.getText().strip() for cell in table.findAll('td') if cell] 

그런 식으로 cell이 None이면 getText를 실행하려고 시도하지 않고 그 셀을 건너 뜁니다. 가능하다면 디버깅해야하는데, pdb 나 ipdb (내가 사용하기를 좋아하는 것)를 사용하는 것이 좋습니다. 여기에 tutorial이 있습니다. 줄 및 인쇄 값 바로 앞에 멈출 수 있습니다.