Форум сайта python.su
всем привет.
Очень хочется написать гаджет для Windows 7.
Гаджет должен уметь:
-добавлять/удалять RSS(лент новостей).
-хранить список RSS. Т.е. при входе/выходе из операционки не приходилось снова добавлять url.
-иметь поле для отображения тем новостей, с возможностью проматывания списка(если новостей много)
-по нажатию на тему новости, выводить краткое содержание(обычно первый абзац всего текста)
Питонист я не опытный. Хочу на этом примере прокачать свой skill.
какие модули мне могут в этом помочь? С чего лучше начать(например просто повозращать данные без графического интерфейса)?
есть ли примеры подобного?
Офлайн
Набери “парсер”-примеров полно в НЕТе и на форуме
Офлайн
спасибо за подсказку
вот отыскал модуль http://grablib.org/docs/
начну с него
Офлайн
вот код, который достает с сайта название топика
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')
Офлайн
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')
Офлайн
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
Офлайн
Как-то сложно все у Вас, попробуйте так:
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)
Офлайн