2014-10-26 4 views
0

Я новичок в python. Я хочу сохранить каждый тег HTML в элемент списка.Разбор HTML-тегов с использованием python

from bs4 import BeautifulSoup 
text = """ 
<body> 
    <div class="product"> 
    <div class="x">orange</div> 
    <div class="x">apple</div> 
    <p> This is text </p> 
    </div> 
</body>""" 
soup = BeautifulSoup(text) 

y=[] 
for i in (soup.find_all("div", class_="product")): 
    y.append(i.get_text().encode("utf-8").strip()) 

Из приведенного выше кода длина y равна 1 и сохраняет весь текст по одному элементу списка. Тем не менее, необходимо проанализировать использование «div-продукта» и сохранить каждый текст внутри тега html в другой элемент списка.

Так что у будет:

y =['orange', 'apple', 'This is text'] 

вместо:

y=['orange\napple\n This is text'] 

ответ

0

Не используйте text, если все, что было нужно, непосредственно содержал строку, и задавать только для элементов, содержащихся в div.product тег:

for elem in soup.select("div.product *"): 
    y.append(elem.string.strip().encode('utf8')) 

Demo:

>>> y = [] 
>>> for elem in soup.select("div.product *"): 
...  y.append(elem.string.strip().encode('utf8')) 
... 
>>> y 
['orange', 'apple', 'This is text'] 
0
soup.find_all("div",class_="product") 

дает все теги Div с классом продукта, так и есть список в настоящее время. Поэтому, когда u запускает цикл for, он выполняет итерацию только один раз и дает полный текст в теге div.

Таким образом, чтобы данные каждого ребенка использовать что-то вроде этого

for child in soup.find_all("div", class_="product").findChildren(): 
     y.append(child.string.strip().encode('utf8')) 
Смежные вопросы