Форум сайта python.su
0
Есть код, он работает нормально но явно не правильно. В силу отсутствия опыта и знаний прошу помочь с правильным написанием кода. Сам код парсит RSS новости и создает уведомление в виде окна.
#!/usr/bin/env python3 import csv import urllib.request from bs4 import BeautifulSoup from easygui import * import datetime import time now_time = datetime.datetime.now() cur_minutes = now_time.minute while True: def get_html(url): response = urllib.request.urlopen(url) return response.read() def parse(html): soup = BeautifulSoup(html) telo = soup.find('channel') projects =[] for item in telo.find_all('item'): for wer in item.find_all('wf:expiry'): time_end = wer.text[-8:-5] projects.append({ 'Событие' : item.title.text , 'Время окончания' : time_end + ' минут' }) return projects def main(): msgbox ( parse(get_html('http://content.warframe.com/dynamic/rss.php')), title ='Сигнал') if __name__ == '__main__': main() stop = cur_minutes + 5 while cur_minutes < stop: now_time = datetime.datetime.now() cur_minutes = now_time.minute
Офлайн
221
без него никак и это нормально, просто оформить нужно по человечески. Весь функционал перенесите в функцию main так, что бы она была действительно главной функцией - сейчас это явно не так. Сделайте таким образом что бы в этом модуле был сверху импорт, потом определения функций, и в конце строчка
if __name__ == '__main__': main()
Офлайн
8
измените строчку
soup = BeautifulSoup(html)
soup = BeautifulSoup(html, 'lxml')
from easygui import msgbox
Отредактировано Vigi (Окт. 8, 2015 08:02:37)
Офлайн
0
JOHN_16
Сделал так, вроде оно.
#!/usr/bin/env python3 import csv import urllib.request from bs4 import BeautifulSoup from easygui import msgbox import datetime import time while True: def delay (): now_time = datetime.datetime.now() cur_minutes = now_time.minute stop = cur_minutes + 5 while cur_minutes < stop: now_time = datetime.datetime.now() cur_minutes = now_time.minute def get_html(url): response = urllib.request.urlopen(url) return response.read() def parse(html): soup = BeautifulSoup(html) telo = soup.find('channel') projects =[] for item in telo.find_all('item'): for wer in item.find_all('wf:expiry'): time_end = wer.text[-8:-5] projects.append({ 'Событие' : item.title.text , 'Время окончания' : time_end + ' минут' }) return projects def main(): msgbox ( parse(get_html('http://content.warframe.com/dynamic/rss.php')), title ='Сигнал') if __name__ == '__main__': main() delay()
VigiСпасибо изменил
и исправте импортне правильно указывать *from easygui import msgbox
soup = BeautifulSoup(html, 'lxml')
Офлайн
221
malkir
нет не оно. Вот примерно такая структура:
import ... def delay(): .... def get_html(): .... .... def main(): while True: msgbox ( parse(get_html('http://content.warframe.com/dynamic/rss.php')), title ='Сигнал') delay() if __name__ == '__main__': main()
Офлайн
0
JOHN_16
Спасибо, с меня +
Офлайн
8
malkir
А вот зачем
soup = BeautifulSoup(html, ‘lxml’)
не понял, можете объяснить?
Офлайн