2011-07-26 22 views
-2

Webページのショッピングカートにデータを入力し、合計を検証するアプリを開発しています。それはうまく動作しますが、HTML出力の解析に問題があります。Python - BeautifulSoupでのエラー解析

前の説明; retrieving essential data from a webpage using python、上記のユーザーの問題を解決するためにBeautifulSoupを使用することをお勧めします。

私はPythonコードを借りてMacOSシステムで動作させました。しかし、コードをubuntuインストールにコピーしたとき、私は奇妙なエラーが発生しています。

**コード(私は問題を見ている):

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]) 

**エラー(Ubuntuのサーバー上)

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ではなくubuntuで動作するのかはわかりません。

提案がありますか?

ありがとうございます。

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

こんにちはGuysは、様々な提案をいただき、ありがとうございます。私はそれらの大部分を試しました( "if cell"ステートメントをコードに組み込みましたが、まだ動作していません)。

@ Ignacio Vazquez-Abrams - 私はしようとしているHTMLのコピーですストリップ:それはUbutntu、全く分からないでは動作しない理由として

http://pastebin.com/WdaeExnC

+0

HTMLの外観はわかりません。 –

+0

何が起こっているにしても、そこにはテキストがありません。 – agf

答えて

0

しかし、あなたはこの試みることができる:。

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

または、table.findAll( 'td')]のセルの 'dump = [(cell.getText()または '').strip()。 – MRAB

0

をに問題があるようには見えませんあなたが読んでいるHTMLで、私がやることはあなたのコードを変更することです

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

このようにcellがNoneの場合、getTextを実行せずにそのセルをスキップします。可能であれば、デバッグするべきです、私はpdbまたはipdb(私が使いたいもの)を使うことをお勧めします。ここにはtutorialがあり、行や印刷の値の直前で停止することができます。

関連する問題