2015-12-21 74 views
1

我试图从HTML数据中提取数字,以便我可以得到它们的总和。但是,当我尝试运行它时,我遇到了上述错误。它是指“数据=”行。这行代码中提到的这个错误是什么?我是否正确设置了“for”循环?谢谢你的想法。TypeError:'NoneType'对象不可调用(Python:从HTML数据中刮除)

import urllib 
from bs4 import BeautifulSoup 

url = "http://python-data.dr-chuck.net/comments_42.html" 
html = urllib.urlopen(url).read() 

soup = BeautifulSoup(html, "html.parser") 
tags = soup('span') 
data = soup.findall("span", {"Comments":"Comments"}) 
numbers = [d.text for d in data] 

summation = 0 
for tag in tags: 
    print tags 
    y= tag.finall("span").text  
    summation = summation + int(y)     
print summation 

这是HTML数据的样子:所有的

<tr><td>Modu</td><td><span class="comments">90</span></td></tr> 
<tr><td>Kenzie</td><td><span class="comments">88</span></td></tr> 
<tr><td>Hubert</td><td><span class="comments">87</span></td></tr> 

回答

1

首先,没有findall()方法BeautifulSoup - 有find_all()。此外,你基本上是寻找元素具有Comments属性具有Comments值:

soup.findall("span", {"Comments":"Comments"}) 

而且,这是Python的,你可以总结与built-in sum()容易得多。

修正版本:

data = soup.find_all("span", {"class": "comments"}) 
print sum(int(d.text) for d in data) # prints 2482 
+0

你是对的;我的意思是让下划线找到所有的方法并使用内置的sum函数。我想我的一部分习惯于经常使用“for”循环。感谢您的反馈意见。 – cybernerd