@hardwellZero

Какие ошибки в парсере?

Добрый вечер.
Начал изучать Python. Решил немного попрактиковаться и написать простенький парсер, а по-скольку я люблю смотреть сериалы от Лостфильма, то выбор пал именно на их сайт.
Вообщем скрипт работает, но отправляет сообщение каждый раз как проходит проверку. Какую нужно сделать проверку в стиле:
Если уже отправлял - не отправлять
Прошу простить меня за столь "быдловый" код. Я только начинаю ;)
# -*- coding: utf-8 -*-
from grab import Grab
import time
import smtplib
import email.utils
from email.mime.text import MIMEText

from_addr = 'имяотправителя@gmail.com'
to_addrs  = 'имяполучателя@yandex.ru'

text = 'Вышла новая серия! Чекай!'

msg = MIMEText(text, "", "utf-8")

msg['To'] = email.utils.formataddr(('Эй ты', to_addrs))
msg['From'] = email.utils.formataddr(('Свежие сериалы', from_addr))
msg['Subject'] = 'Свежак'

username = 'логин'
pwd = 'пароль'

server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username, pwd)

url = Grab()
url.go('http://www.lostfilm.tv/browse.php')

old_list_serials = [u'\u0412\u043e\u043d\u043d\u0430\u044f \u043b\u043e\u0449\u0438\u043d\u0430', u'\u041f\u0435\u0440\u0432\u043e\u0440\u043e\u0434\u043d\u044b\u0435', u'\u041a\u043e\u0432\u0430\u0440\u043d\u044b\u0435 \u0433\u043e\u0440\u043d\u0438\u0447\u043d\u044b\u0435', u'\u0427\u0435\u0440\u043d\u044b\u0435 \u043f\u0430\u0440\u0443\u0441\u0430', u'\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0440\u0438']
new_list_serials = []

url_select = url.doc.select('//span[@style="font-family:arial;font-size:14px;color:#000000"]')[:5]
check = 0
while check == 0:
    for serials in url_select:
        new_list_serials.append(serials.text())

    if new_list_serials == old_list_serials:
        print "EQUAL"
    elif new_list_serials != old_list_serials:
        server.sendmail(from_addr, to_addrs, msg.as_string())
        print "NOT EQUAL"
        del old_list_serials[:]
        for serials in url_select:
            old_list_serials.append(serials.text())
        print old_list_serials
    time.sleep(10)
    check = 0
  • Вопрос задан
  • 2585 просмотров
Решения вопроса 1
Brick85
@Brick85
c и python программист
new_list_serials не сбрасывается, а при каждой итерации становится всё больше.
сразу после
while check == 0:
добавить
new_list_serials = []

И ещё:
del old_list_serials[:]
for serials in url_select:
    old_list_serials.append(serials.text())

можно заменить на
old_list_serials = new_list_serials
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@FireGM
У вас всегда new_list_serials != old_list_serials. Потому что в нью листе у вас берутся ссылки со страницы, а в олд листе просто добавляются.
Сделайте лучше запись в файл, и потом для каждого элемента проверять, есть ли он в файле, если нету, то добавлять в файл. В конце всех проверок, можно пускать письмо.
И лучше запускать в кронтабе каком-нибудь.
upd:
Смотрю в книгу вижу фигу... Прошу простить, вообще не то видел в коду.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы