2016-05-23 4 views
0

Я начинающий python/BeautifulSoup, я пытаюсь извлечь весь контент в <td width="473" valign="top"> -><strong>.python beautifulsoup parsing recursing

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl"> 
<head> 
    <title>MIEJSKI OŚRODEK KULTURY W ŻORACH Repertuar Kina Na Starówce</title> 
</head> 
<body> 
<div class="page_content"> 
<p>&nbsp;</p> 
<p> 
<table style="width: 450px;" border="1" cellspacing="0" cellpadding="0"> 
<tbody> 
<tr> 
<td width="57" valign="top"> 
<p align="center"><strong>Data</strong></p> 
</td> 
<td width="473" valign="top"> 
<p align="center"><strong>Tytuł Filmu</strong></p> 
</td> 
<td width="95" valign="top"> 
<p align="center"><strong>Godzina</strong></p> 
</td> 
</tr> 
<tr> 
<td width="57" valign="top"> 
<p align="center"><strong>&nbsp;</strong></p> 
</td> 
<td width="473" valign="top"> 
<p align="center"><strong>1 - 5.05</strong></p> 
</td> 
<td width="95" valign="top"> 
<p align="center">&nbsp;</p> 
</td> 
</tr> 
<tr> 
<td width="57" valign="top"> 
<p align="center"><strong>1</strong></p> 
</td> 
<td width="473" valign="top"> 
<p align="center"><strong>KINO POWT&Oacute;REK: ZWIERZOGR&Oacute;D </strong>USA/b.o&nbsp; cena 10 zł</p> 
</td> 
<td width="95" valign="top"> 
<p align="center">16:30</p> 
</td> 
</tr> 

</tbody> 
</table> 
</p> 
</body> 
</html> 

Самая дальняя я могу пойти, чтобы получить список всех тегов с этим кодом:

from bs4 import BeautifulSoup 

soup = BeautifulSoup(open("zory1.html"), "html.parser") 

y = soup.find_all(width="473") 

newy = str(y) 

newsoup = BeautifulSoup(newy ,"html.parser") 
stronglist = newsoup.find_all('strong') 

lasty = str(stronglist) 

lastsoup = BeautifulSoup(lasty , "html.parser") 

lst = soup.find_all('strong') 

for item in lst: 
    print item 

Как я могу вынуть содержимое внутри тега, в уровне новичка?

Благодаря

+0

Я слышал lxml.cssSelect довольно хорошо делать это без волосатость .. – kpie

ответ

1

Используйте get_text(), чтобы получить текст узла-потомка.

Полный рабочий пример, когда мы идем по всем строкам и все ячейки внутри таблицы:

from bs4 import BeautifulSoup 

data = """your HTML here""" 
soup = BeautifulSoup(data, "html.parser") 

for row in soup.find_all("tr"): 
    print([cell.get_text(strip=True) for cell in row.find_all("td")]) 

Печатает:

['Data', 'Tytuł Filmu', 'Godzina'] 
['', '1 - 5.05', ''] 
['1', 'KINO POWTÓREK: ZWIERZOGRÓDUSA/b.o\xa0 cena 10 zł', '16:30'] 
+1

Вы можете '[td.text.strip() для тд в soup.select ("td [width = 473]") ', чтобы найти только конкретные tds. Почему выбор не поддерживает несколько атрибутов? –

0

Здесь находятся

from bs4 import BeautifulSoup 

navigator = BeautifulSoup(open("zory1.html"), "html.parser") 

tds = navigator.find_all("td", {"width":"473"}) 

resultList = [item.strong.get_text() for item in tds] 

for item in resultList: 
    print item 

Результат

$ python test.py 
Tytuł Filmu 
1 - 5.05 
KINO POWTÓREK: ZWIERZOGRÓD 

+0

классный, красивый! Спасибо! – Yan