Найти - Пользователи
Полная версия: как исключить из скрапинга страницы в которых нет определённых данных?
Начало » Data Mining » как исключить из скрапинга страницы в которых нет определённых данных?
1
Lena13_08
Здраствуйте ребята. Занимаюсь парсингом страниц с текстами песен.
Так вот код готов и почти идеальный потому что извлекает все страницы с успехом, но некоторые песни не имеют текстов поэтому я получаю просто пустой кусок в словаре.
тоисть в некоторых страниц есть пустые теги
Так вот как не включать страницы которые не имеет какой либо инфо?
Тоисть я хочу просто пропускать всю страницу и идти с следущей чтобы у меня была колекция только из песен у которых есть текст
 <div id='content_h' class='dn'>And through the wire....</div>
 <div id='content_h' class='dn'></div>


Спасибо заранее
FishHook
Lena13_08
Так вот код готов и почти идеальный потому что извлекает все страницы с успехом

где-то в Калифорнии сейчас отвернулся к стенке и тихо заплакал поджав колени один маленький Стив Макконелл
PooH
FishHook
где-то в Калифорнии
В Белвью, штат Вашингтон
vic57
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....
>>> 
Lena13_08
vic57
Я попробую снова так как вижу что никто даже не прочитал вопрос а только фразу: код почти идеальный.
Извиняюсь если обидела какую-то хакер-душу.

Так вот попытка номер 2:
У меня есть страницы html.
На каждой из них есть данные о песне(имя певца, текст песни, название песни)
Я написала код который извлекает эту инфу и сохраняет её в словари(следовательно json)
Но!!!! На некоторых страницах есть пустые теги поэтому некоторые value в словаре пустые.
Я думаю что смогла бы и написать код на проверку но где его поместить
Вот кусочек моего кода
 ,,,,,,,
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))
такие функции сверху есть и для певца, песни. И потом следует эта генеральная (и еще одна которая проходиться циклом по всем url)
 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
vic57
у любого тега в 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>]
>>> 
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB