Форум сайта python.su
Здраствуйте ребята. Занимаюсь парсингом страниц с текстами песен.
Так вот код готов и почти идеальный потому что извлекает все страницы с успехом, но некоторые песни не имеют текстов поэтому я получаю просто пустой кусок в словаре.
тоисть в некоторых страниц есть пустые теги
Так вот как не включать страницы которые не имеет какой либо инфо?
Тоисть я хочу просто пропускать всю страницу и идти с следущей чтобы у меня была колекция только из песен у которых есть текст
<div id='content_h' class='dn'>And through the wire....</div>
<div id='content_h' class='dn'></div>
Офлайн
Lena13_08
Так вот код готов и почти идеальный потому что извлекает все страницы с успехом
Офлайн
FishHookВ Белвью, штат Вашингтон
где-то в Калифорнии
Офлайн
Lena13_08прям даже неловко как-то такой код портить…
код готов и почти идеальный
>>> s='''<div id='content_h' class='dn'>And through the wire....</div> <div id='content_h' class='dn'></div>''' >>> from lxml import html >>> pth = html.fromstring(s).xpath('//div[@id="content_h"][@class="dn"][text()]') >>> for i in pth: print (i.attrib, i.text) {'id': 'content_h', 'class': 'dn'} And through the wire.... >>>
Отредактировано vic57 (Ноя. 22, 2017 08:13:30)
Офлайн
vic57Я попробую снова так как вижу что никто даже не прочитал вопрос а только фразу: код почти идеальный.
,,,,,,, def lyrics(soup): lyrics = soup.findAll("div", { "id" : "content_h" }) lyric_text = re.sub('[<;>/\-]', " ", str(lyrics)).split() lyric_text = ([word for word in lyric_text if word != 'br'])[4:-2] return(' '.join(lyric_text))
def extract_song(soup): title={'song':song_name(soup)} title['lyrics']=lyrics(soup) title['singer']=singer_name(soup) title['url']=song_url(song_name(soup),singer_name(soup)) return title
Офлайн
у любого тега в XPath есть элементы - tag,attrib,text
в вашем случае el.text=None если текста нет, что я и написал
bs4 я не пользуюсь
http://python.su/forum/topic/23472/
>>> s='''<div id='content_h' class='dn'>And through the wire....</div> <div id='content_h' class='dn'></div>''' >>> from bs4 import BeautifulSoup as bs >>> l =bs(s).findAll("div") >>> [ i for i in l if i.text] [<div class="dn" id="content_h">And through the wire....</div>] >>>
Отредактировано vic57 (Ноя. 22, 2017 10:55:50)
Офлайн