Найти - Пользователи
Полная версия: Не знаю как реализовать дальше
Начало » Python для новичков » Не знаю как реализовать дальше
1
malkir
Есть код, он работает нормально но явно не правильно. В силу отсутствия опыта и знаний прошу помочь с правильным написанием кода. Сам код парсит 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
Вот вопрос как обойтись без бесконечного цикла (мне кажется это не совсем правильный способ). И второй как или чем сделать вывод в виде всплывающего уведомления а не целого окна (желательно чтобы основу можно было разместить в трей).
JOHN_16
без него никак и это нормально, просто оформить нужно по человечески. Весь функционал перенесите в функцию main так, что бы она была действительно главной функцией - сейчас это явно не так. Сделайте таким образом что бы в этом модуле был сверху импорт, потом определения функций, и в конце строчка
if __name__ == '__main__':
        main()
т.е. логически работу модуля сгруппируйте коректно.
Vigi
измените строчку
soup = BeautifulSoup(html)
на
soup = BeautifulSoup(html, 'lxml')
и если нужно установите модуль lxml

и исправте импорт
from easygui import msgbox
не правильно указывать *
malkir

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
Vigi
и исправте импорт
from easygui import msgbox
не правильно указывать *
Спасибо изменил
А вот зачем
 soup = BeautifulSoup(html, 'lxml')
не понял, можете объяснить?
JOHN_16
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()

Главный смысл в том что у вас есть функция которая выступает в роли единой точки входа программы.
Проблема в вашем случае что вы не сможете импортироват ьсобстыенный модуль - он у вас будет вечно выполняться.
malkir
JOHN_16
Спасибо, с меня +
Vigi
malkir
А вот зачем
soup = BeautifulSoup(html, ‘lxml’)
не понял, можете объяснить?

прочтите оф доку по супу, там это все прописано, при выборе lxml функция ускорит свое выполнение
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB