2016-01-10 3 views
1

Я хочу получить сумму чисел от website. Я делаю это:Списки слияния Python

lst = list() 
url = raw_input('Enter - ') 
html = urllib.urlopen(url).read() 
soup = BeautifulSoup(html) 
tags = soup('span') 
for tag in tags: 
    lst.append(map(int,tag.contents)) 
print lst 

Но если я не ошибаюсь, у меня теперь есть подсписок для каждого числа. Таким образом, sum(lst) не работает. Как я могу либо объединить подсписчики, либо ввести числа в один список? Благодаря!

+0

Так что же вы получаете, когда вы печатаете 'lst'? –

+0

Вы пробовали ['list.extend()'] (https://docs.python.org/3/library/stdtypes.html#mutable-sequence-types)? – Kevin

+0

Да, lst, извините за путаницу. Или, точнее, sum (lst) – erocoar

ответ

3

Вы можете использовать следующее:

import urllib 
from bs4 import BeautifulSoup 

url = 'http://python-data.dr-chuck.net/comments_213060.html' 
html = urllib.urlopen(url).read() 
soup = BeautifulSoup(html) 
tags = soup('span') 
lst = [int(tag.text) for tag in tags] 
print(sum(lst)) 

Выход

2838 
+0

Спасибо, это здорово! Не могли бы вы рассказать мне, почему нужен '[0]'? – erocoar

+0

Во-вторых, лучше использовать 'tag.text' вместо' tag.contents [0] '. См. Обновленный ответ выше. – gtlambert

2

Вы можете просто использовать built-in sum() function:

comments = soup('span', class_="comments") 
sum_coments = sum(int(comment.get_text(strip=True)) for comment in comments) 
print(sum_coments) # prints 2838 

Обратите внимание, что .get_text() используется здесь, который возвращает «текст» элемента в отличие от .contents, который представляет собой список текстов детей элемента.

Обратите внимание, что я также улучшил локатор, а также проверил span s, чтобы иметь класс comments.

Смежные вопросы