2016-11-15 2 views
1
from bs4 import BeautifulSoup 
import sys 

soup = BeautifulSoup(open(sys.argv[2]), 'html.parser') 
print(soup.prettify) 

if sys.argv[1] == "h": 
    h2s = soup.find_all("h2") 
    for h in h2s: 
     print(h.string()) 

最初のprint文(テストとして追加)が動作します。 二print文はスロー:美しいスープ4 .string() 'NoneType'オブジェクトは呼び出し可能ではありません

File "sp2gd.py", line 40, in <module> 
    print(h.string()) 
TypeError: 'NoneType' object is not callable 

答えて

2

BeautifulSoupの.stringは財産ではなく、呼び出し可能な方法であり、そしてそれは、複数の子要素が含まれているインスタンスの要素の内容の単一の、明確な文字列表現は(、ありませんとき)、その値はNone - エラーメッセージです。

は括弧にh.string()を失い、あなたは、エラーが発生して停止されます:

if sys.argv[1] == "h": 
    h2s = soup.find_all("h2") 
    for h in h2s: 
     print(h.string) # no parentheses 

... h2要素は複数の子を持っている場合も、結果は特に照明されない場合があります。その場合、.strings and .stripped_stringsが便利です:

if sys.argv[1] == "h": 
    h2s = soup.find_all("h2") 
    for h in h2s: 
     for s in h.stripped_strings: 
      print(s) 
+0

私の知るところによれば、 '.text'は自分の目的に適しています。 –

関連する問題