2015-01-29 3 views
3

Я пытаюсь извлечь из таблицы ниже. Я отрезал его после второго, еще 6, чтобы следовать. Все восемь строк должны быть извлечены, и мне нужно ниже примерного значения 61.5, значение 56.43 и т. Д.Извлечь строку из тега с помощью BeautifulSoup

Ниже snipplet кода дает мне только первое значение (61.5). Как я могу взять оставшиеся значения?

soup.find ("DIV", { "класс": "значение"}). Текст

<td class="flow"> 
    <div class="heading" style="min-height: 63px;">Dornum</div> 
    <div class="data"><div class="value">61.5</div> MSm<sup>3</sup>/d</div> 
</td> 
<td class="flow"> 
    <div class="heading" style="min-height: 63px;">Emden EMS</div> 
    <div class="data"><div class="value">56.43</div> MSm<sup>3</sup>/d</div> 
</td> 
+0

Использование списка: '[float (el.text) – Phylogenesis

ответ

3

Используйте soup.find_all(), чтобы получить список соответствующих элементов, а затем захватить атрибут text для каждого элемента:

from bs4 import BeautifulSoup 

html = '''<td class="flow"> 
    <div class="heading" style="min-height: 63px;">Dornum</div> 
    <div class="data"><div class="value">61.5</div> MSm<sup>3</sup>/d</div> 
</td> 
<td class="flow"> 
    <div class="heading" style="min-height: 63px;">Emden EMS</div> 
    <div class="data"><div class="value">56.43</div> MSm<sup>3</sup>/d</div> 
</td>''' 

soup = BeautifulSoup(html) 

data = [element.text for element in soup.find_all("div", "value")] 

>>> data 
[u'61.5', u'56.43'] 

Или, если вы хотите их как поплавки:

data = [float(element.text) for element in soup.find_all("div", "value")] 
>>> data 
[61.5, 56.43] 
3
<td class="flow"> 
<div class="heading" style="min-height: 63px;">Dornum</div> 
<div class="data"><div class="value">61.5</div> MSm<sup>3</sup>/d</div> 
</td> 
<td class="flow"> 
<div class="heading" style="min-height: 63px;">Emden EMS</div> 
<div class="data"><div class="value">56.43</div> MSm<sup>3</sup>/d</div> 
</td> 

попробовать это:

temp = soup.select('div[class="value"]') 
result = [] 
for i in temp: 
    result.append(i.get_text()) 
0

Вам нужно будет получить все значения, используя find_all() в BeautifulSoup.

from bs4 import BeautifulSoup 

html = '''<td class="flow"> 
    <div class="heading" style="min-height: 63px;">Dornum</div> 
    <div class="data"><div class="value">61.5</div> MSm<sup>3</sup>/d</div> 
</td> 
<td class="flow"> 
    <div class="heading" style="min-height: 63px;">Emden EMS</div> 
    <div class="data"><div class="value">56.43</div> MSm<sup>3</sup>/d</div> 
</td>''' 

soup = BeautifulSoup(html) 
out=[] 
for elem in soup.find_all("div", {"class":"value"}): 
    out.append(elem.text) 
Смежные вопросы