Комментарии 73
<link title="" type="application/rss+xml" rel="alternate" href="http://habrahabr.ru/rss/.../"/>
+8
Построчно парсить на пайтоне- такого я еще не видел.
+14
Почему бы не использовать urllib и lxml для парсинга RSS, что более удобно, нежели построчно читать на Python…
+3
Можно, а я хотел сам сделать от и до. А если человеку понравится… а такие уже есть — не надо ничего дополнительно устанавливать, просто скопировать
0
К счастью, оба модуля являются стандартными для Python =)
0
Ну os.* же вы используете, а не пишите модули на ассембле для посекторного чтения с винта и запросов к хабру через порты сетевой карты :)
0
Проблемы от подобных статей не только в том, что они засоряют интернет.
Человеку, действительно, может понравиться, и он возьмёт на вооружение представленные в статье подходы или код, и плохого кода в мире станет ещё больше.
Человеку, действительно, может понравиться, и он возьмёт на вооружение представленные в статье подходы или код, и плохого кода в мире станет ещё больше.
+7
НЛО прилетело и опубликовало эту надпись здесь
Можно и главную парсить, если мозги с RSS несовместимы, как у меня :)
-1
спонсор топика МАТЬ МОЯ ЖЕНЩИНА!!!
+10
а зачем?
+1
В этой статье, традиционно для Хабра, плохо ВСЁ.
От подхода до «while(1)».
От подхода до «while(1)».
+10
Вы обижаете питон.
+16
Это php-код на Питоне, простите.
+9
Чем именно плох код? Он делает именно то, что нужно, ничего лишнего не напичкано.
-2
Код плох тем, что в нём практически каждая строка написана не так, как надо писать на питоне.
Кроме того, код решает неправильную задачу неправильным способом.
Кроме того, код решает неправильную задачу неправильным способом.
+6
Питон сам по себе минималистический язык, где всё просто, и ваша програмка должна быть простенькая, потом её приятно читать. Вы посмотрите в сторону выше упомянутых библиотек лхмл и урллиб2. Поверьте, меньше гемороя, больше спокойствия.
Драть HTML с помощю wget, потому, что вгет это умеет, и парсить что-то по строчкам, ето жесть!
Давайте напишем питоновский скрипт а из него будем вызывать PHP функцию file_get_contents?
Драть HTML с помощю wget, потому, что вгет это умеет, и парсить что-то по строчкам, ето жесть!
Давайте напишем питоновский скрипт а из него будем вызывать PHP функцию file_get_contents?
0
Следующий этап — скачка и парсинг рсса тем же lxml или чем-нибудь встроенным. Следующий — парсинг его feedparser'ом. Следующий — использование рсс-ридера вместо написания ненужного кода.
Только вот перед тем, как менять стрингметоды и os.system на lxml и урллиб, придётся всё-таки прочитать хотя бы tutorial и узнать, как же пишут на питоне.
Только вот перед тем, как менять стрингметоды и os.system на lxml и урллиб, придётся всё-таки прочитать хотя бы tutorial и узнать, как же пишут на питоне.
0
А ну да, тоже мелочь…
0
использование рсс-ридера вместо написания ненужного кода.
Сколько ни пробовал RSS-ридеров, но ни один не прижился. Главная причина — куча ни то что не нужной, а мешающей функциональности при отсутствии нужной. А парсить ленту хабра или его главную — технической разницы не вижу.
0
> А парсить ленту хабра или его главную — технической разницы не вижу.
Бывает.
Бывает.
+1
Я как-то думал, что RSS это тоже подмножество SGML и техника парсинга одна и та же.
0
Бывает.
RSS это XML, а парсить XML можно проще, чем любой другой SGML.
RSS это XML, а парсить XML можно проще, чем любой другой SGML.
0
Техника парсинга rss это import feedparser; feedparser.parse(url) :)
+1
volch@ubuhost:~$ python
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import feedparser
Traceback (most recent call last):
File "", line 1, in ImportError: No module named feedparser
0
sudo pip install feedparser
0
Для себя пойдёт, для публично распространяемого скрипта в исходниках я бы не стал вводить лишние зависимости, требующих ручного удовлетворения. Или оформил бы сам в виде пакета. Правда заморочек бы было наверное… Проще самому парсер на основе стандартных либ написать, имхо.
0
А я бы стал. А у кого нет возможности поставить feedparser, это его проблемы. А может он python не может поставить, я что теперь должен на C переписать скрипт и распространять его в бинарниках для разных платформ? А вдруг у него деньги на счёте провайдера кончились, мне теперь бегать ему домой приносить содержимое страниц на дискетках? Я считаю, в желании угодить пользователю надо соблюдать оптимальный балланс.
> Или оформил бы сам в виде пакета. Правда заморочек бы было наверное…
Это всего лишь одна строчка в setup.py, install_requires называется.
> Проще самому парсер на основе стандартных либ написать, имхо.
И собрать все грабли, что были пофиксены в фидпарсере за время его развития.
> Или оформил бы сам в виде пакета. Правда заморочек бы было наверное…
Это всего лишь одна строчка в setup.py, install_requires называется.
> Проще самому парсер на основе стандартных либ написать, имхо.
И собрать все грабли, что были пофиксены в фидпарсере за время его развития.
0
Питон в моём дистре стоит, потому не вопрос. Имхо, оптимальный баланс — скопипастил исходники или скачал файл и всё работает. Бегать не буду, но и тестировать под другими дистрами и осями скрипт, сделанный для себя, тоже.
>Это всего лишь одна строчка в setup.py, install_requires называется.
Если бы я сам разбирался мне нужно было бы, как минимум, узнать:
— что файл называется setup.py
— где он должен лежать
— какая это строчка
— куда эти файлы (setup.py и, скажем, habramonitor.py ) закачивать
25% моих проблем на будущее вы решили :)
>Это всего лишь одна строчка в setup.py, install_requires называется.
Если бы я сам разбирался мне нужно было бы, как минимум, узнать:
— что файл называется setup.py
— где он должен лежать
— какая это строчка
— куда эти файлы (setup.py и, скажем, habramonitor.py ) закачивать
25% моих проблем на будущее вы решили :)
0
> Имхо, оптимальный баланс — скопипастил исходники или скачал файл и всё работает.
Копипастят исходники, скачивают файлы нубы. Люди в теме ставят нужные пакеты через aptitude, easy_install и pip, преимущественно в virtualenv. А другие люди в теме подготовливают эти пакеты.
> скрипт, сделанный для себя
Если скрипт сделан для себя, то обсуждать особого смысла нет — вы делаете, как вам больше нравится в рамках вашего опыта. Если для других — правильный путь сделать distutitls пакет и прописать в нём зависимости.
Копипастят исходники, скачивают файлы нубы. Люди в теме ставят нужные пакеты через aptitude, easy_install и pip, преимущественно в virtualenv. А другие люди в теме подготовливают эти пакеты.
> скрипт, сделанный для себя
Если скрипт сделан для себя, то обсуждать особого смысла нет — вы делаете, как вам больше нравится в рамках вашего опыта. Если для других — правильный путь сделать distutitls пакет и прописать в нём зависимости.
0
> Копипастят исходники, скачивают файлы нубы
Скажите это гентушникам)… которые неделями могут с этими делами капаться
Скажите это гентушникам)… которые неделями могут с этими делами капаться
0
Если есть исходники, но нет пакета, то я скачаю исходники лучше. Если решу поделиться, то предоставлю исходники и инструкции для таких же нубов :), а если у людей в теме будет желание, то на базе моих исходников они сделают пакет — разделение труда, личный вклад в open source и всё такое :) Просто разбираться с системами управления пакетами нет желания, один пробовал сделать пакет nginx+passenger — так толком ничего и не получилось, не осилил :(
0
В моём дистре и feedparser есть.
0
А если вы про setup.py не знаете (о нём написано в официальной доке с очевидным названием), вам не надо распространять питоний софт.
0
Бывает.
0
Поставьте.
0
лютый бешеный ппц
+6
Автор видимо не знает про то, что у хабра есть rss, и что наверняка существует апплет для гнома для высвечивания RSS. Да даже если апплет не существует, то парсить сайт при существующем RSS это жесть. А если в хабре шаблон поменяют — все отвалится?
0
#!/usr/bin/python
#-*- coding:utf-8 -*-
import feedparser
import os
import sys
import datetime
habr = "http://habrahabr.ru/rss"
rss = feedparser.parse(habr)
#print "title: " + rss.feed.title
#print "description: " + rss.feed.description + "\n"
for entry in rss.entries:
newstr = entry.title.split(" / ")
print "Blog: \t" + newstr[0] + "\n" + "Topic: \t" + newstr[1]
# convert the given time format to datetime
posted_datetime = datetime.datetime(
entry['updated_parsed'][0],
entry['updated_parsed'][1],
entry['updated_parsed'][2],
entry['updated_parsed'][3],
entry['updated_parsed'][4],
entry['updated_parsed'][5]
)
posted = posted_datetime.strftime("%d.%m.%Y %H:%M")
print "Date: \t" + posted + "\n"
… так лучше? Осн. часть
+7
Может, я чего-то не понимаю, но вроде как в RSS ленту попадают не все топики, а только те, которые похожи на отложенное в избранное. Поэтому приходится часто заходить на Хабр и смотреть, что пропустил. Может, полная лента все-таки есть — ткните, пожалуйста, ссылкой.
0
Ваш код оценили на говнокод.ру :)
+3
НЛО прилетело и опубликовало эту надпись здесь
Ну вот, дождались популяризации python. Теперь наслаждайтесь :)
+2
from feedparser import parse
import shelve
import os
db = shelve.open(os.path.expanduser('~/.habra-notifier.cache'), 'c')
for entry in parse('http://habrahabr.ru/rss').entries:
link = entry.link.encode('utf-8')
if not link in db:
db[link] = 1
os.system('notify-send "%s"' % entry.title.encode('utf-8'))
+1
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Оповещение появления нового топика на Хабрахабре с помощью Python