Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Data Mining
  • » как исключить из скрапинга страницы в которых нет определённых данных? [RSS Feed]

#1 Ноя. 22, 2017 00:38:42

Lena13_08
Зарегистрирован: 2017-10-14
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

как исключить из скрапинга страницы в которых нет определённых данных?

Здраствуйте ребята. Занимаюсь парсингом страниц с текстами песен.
Так вот код готов и почти идеальный потому что извлекает все страницы с успехом, но некоторые песни не имеют текстов поэтому я получаю просто пустой кусок в словаре.
тоисть в некоторых страниц есть пустые теги
Так вот как не включать страницы которые не имеет какой либо инфо?
Тоисть я хочу просто пропускать всю страницу и идти с следущей чтобы у меня была колекция только из песен у которых есть текст

 <div id='content_h' class='dn'>And through the wire....</div>
 <div id='content_h' class='dn'></div>


Спасибо заранее

Офлайн

#2 Ноя. 22, 2017 04:56:16

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

как исключить из скрапинга страницы в которых нет определённых данных?

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

где-то в Калифорнии сейчас отвернулся к стенке и тихо заплакал поджав колени один маленький Стив Макконелл



Офлайн

#3 Ноя. 22, 2017 05:09:20

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

как исключить из скрапинга страницы в которых нет определённых данных?

FishHook
где-то в Калифорнии
В Белвью, штат Вашингтон



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#4 Ноя. 22, 2017 07:38:36

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

как исключить из скрапинга страницы в которых нет определённых данных?

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)

Офлайн

#5 Ноя. 22, 2017 08:45:56

Lena13_08
Зарегистрирован: 2017-10-14
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

как исключить из скрапинга страницы в которых нет определённых данных?

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

Офлайн

#6 Ноя. 22, 2017 10:33:53

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

как исключить из скрапинга страницы в которых нет определённых данных?

у любого тега в 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)

Офлайн

  • Начало
  • » Data Mining
  • » как исключить из скрапинга страницы в которых нет определённых данных?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version