#!/usr/bin/python
# -*- coding: koi8-r -*-
#
# скрипт вытаскивает новости с главной страницы LOR и
# делает из них нормальный rss. несложно доработать
# для других сайтов.
#
# автор anonymous
# лицензия GPL2
#
import sys, os, re
BASEDIR="/var/www/"
HEAD="""<?xml version="1.0" encoding="%s"?>
<rss version="0.91">
<channel>
<description>%s</description>
<link>%s</link>
"""
ITEM="""<item>
<title>%s</title>
<link>%s</link>
<description>%s</description>
</item>"""
TAIL="""</channel>
</rss>"""
class SiteDump:
url=""
out=""
title="Untitled"
encoding="ISO-8859-1"
def __init__(self):
self.links={}
self.text=""
def dump(self,basedir=""):
data=os.popen("lynx -dump %s"%self.url).read()
# split references section
i=data.rindex("\nReferences\n")
self.text=data[:i]
self.links.clear()
for l in data[i:].splitlines():
if re.match('^\s*\d{1,}. ',l):
id,link=l.split('. ',1)
self.links[int(id)]=link
out = self.out and open(self.out,'w') or sys.stdout
print >> out, HEAD%(self.encoding,self.title,self.url)
for s in self.split_items():
print >> out, ITEM%self.parse_item(s)
print >> out, TAIL
out.flush()
def split_items(self):
"yield sequence of text pieces"
pass
pass
def parse_item(self,text):
"return (title,link,description) or None"
pass
def find_links(self,text):
"return list of links found and text with removed references"
ids=[]
add=lambda m: ids.append(int(m.groups()[0])) and ''
text= re.sub('\[(\d{1,})\]', add, text)
links = filter(None, [ self.links.get(id,'') for id in ids ])
return links, text
class LOR(SiteDump):
url="http://linux.org.ru"
out=BASEDIR+"linux-org-ru.rss"
title="Русская информация об ОС LINUX"
encoding="koi8-r"
def split_items(self):
return re.split('_{50,}',self.text)[1:-2]
def parse_item(self,s):
links, s = self.find_links(s)
ll=[l.strip() for l in s.splitlines()]
title=ll[2]
description = '\n'.join(ll[4:])
link = len(links) and links[0] or ''
return title, link, description
if __name__=='__main__':
LOR().dump()
Ответ на:
комментарий
от jackill
Ответ на:
комментарий
от anonymous

Ответ на:
комментарий
от jackill
Ответ на:
комментарий
от jackill
Ответ на:
комментарий
от anonymous

Ответ на:
комментарий
от jackill
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Парсинг сайта, ScraPy (2014)
- Форум Как быстро кидать много http запросов асинхронно? (2017)
- Форум Level3 cdn API (2014)
- Форум Обсудить/улучшить/похвастаться bash'овым rss-радио (2018)
- Форум Пытаюсь тренировать модель HuggingFace (2023)
- Форум [python] помогите поймать ошибку (2012)
- Форум [python][sqlalchemy] Не видит foreign key (2009)
- Форум [pygtk] Пара проблем при использовании gio.FileMonitor (2011)
- Форум Flask обновить объект в форме (2019)
- Форум После выполнения скрипта процессы остаются висеть в фоне (2013)