#!/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)