Уведомления

Группа в Telegram: @pythonsu

#1 Март 4, 2012 22:01:56

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

гаджет RSS

всем привет.

Очень хочется написать гаджет для Windows 7.
Гаджет должен уметь:
-добавлять/удалять RSS(лент новостей).
-хранить список RSS. Т.е. при входе/выходе из операционки не приходилось снова добавлять url.
-иметь поле для отображения тем новостей, с возможностью проматывания списка(если новостей много)
-по нажатию на тему новости, выводить краткое содержание(обычно первый абзац всего текста)

Питонист я не опытный. Хочу на этом примере прокачать свой skill.
какие модули мне могут в этом помочь? С чего лучше начать(например просто повозращать данные без графического интерфейса)?
есть ли примеры подобного?

Офлайн

#2 Март 5, 2012 19:47:43

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

гаджет RSS

Набери “парсер”-примеров полно в НЕТе и на форуме

Офлайн

#3 Март 7, 2012 09:21:23

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

гаджет RSS

спасибо за подсказку
вот отыскал модуль http://grablib.org/docs/
начну с него

Офлайн

#4 Март 8, 2012 14:09:01

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

гаджет RSS

вот код, который достает с сайта название топика

import grab 
g=grab.Grab() #создал объект класса Grab
g.setup(log_dir='D:/') #настройка для сохранения данных запроса/ответа и самой страницы
g.go('habrahabr.ru') #запрос на нужную страничку
for elem in g.xpath_list('//h2/a[@class="blog_title blogs"]'): #ВОТ ТУТ ВОПРОС
print elem.text
print elem.get('href')
объясните какой объект/тип возвращает xpath??? или список xpath_list???

чтобы понять как дальше работать, какими методами и т.п.
т.е. что есть TEXT и GET(''HREF), какого класса эти методы
разбирался в pyCharm и читал документацию. Понял , что надо копаться в lxml…
подскажите.

Офлайн

#5 Март 10, 2012 13:26:36

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

гаджет RSS

import grab
g=grab.Grab()
g.setup(log_dir='D:/')
g.go('https://xakepy.cc/external.php?type=RSS2')
for listElement in g.xpath_list('//item'): #я так понял тэг item подразумевает темки на форуме
print '----------------------------'
for Element in listElement: #выбираем из списка тем текст нужных тегов
print Element.xpath_text('//title')
print Element.xpath_text('//description')
немного поизучал модуль lxml, дофига чего неясно. Проще поэкспериментировать, быстрее будет.
Подскажите, может это как то можно сделать универсальныее/проще???
и как бы вы сделали проверку URL(например www.ya.ru) на то , что она не является RSS и наоборот???

Офлайн

#6 Март 13, 2012 14:48:46

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

гаджет RSS

from bs4 import BeautifulSoup
import urllib2
page = urllib2.urlopen('http://forum.hackzona.ru/external.php?type=RSS2')
soup = BeautifulSoup(page)
for item in soup('item'):
print '----------------------------------------------------'
#print type(item)
print item.title.string
print item.description.string
почему возвращает None, когда текст в тэгах на сайте начинается с <![CDATA]>???

Офлайн

#7 Март 15, 2012 03:14:42

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

гаджет RSS

Как-то сложно все у Вас, попробуйте так:

import re
import urllib2

from lxml import etree

NS = re.compile(r"\{.*?\}", re.M)
HTML = re.compile(r"<.*?\>", re.M)
RN = re.compile("(\r?\n)+", re.M)

def parse_rss():
page = urllib2.urlopen("http://forum.hackzona.ru/external.php?type=RSS2")

def clear(text):
return RN.sub("\n", HTML.sub("", text.replace("<br />", "\n"))).strip()

events = ("end",)
for action, elem in etree.iterparse(page, events=events):
if elem.tag == 'item':
yield {NS.sub("", child.tag): clear(child.text) for child in elem}

if "__main__" == __name__:
for topik in parse_rss():
print(topik["pubDate"])
print(topik["title"])
print(topik["description"])
print(topik["encoded"])
print("-" * 79)



Отредактировано (Март 15, 2012 03:20:25)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version