Найти - Пользователи
Полная версия: Парсить значения на сайте с оповещением об изменении данных
Начало » Web » Парсить значения на сайте с оповещением об изменении данных
1 2
esal
Задумался над реализацией следующего кода.
Нужно написать скрипт, который бы отслеживал изменения конкретного значения на сайте (в определенном хтмл теге) например курс валюты, температуры или чего то другого.

Интересует конкретно реализация работы такого скрипта, чтобы при запуске его из консоли скажем, он работал и выводил сообщение об изменениях в значение, которое парсится или отправлял сообщение на личную почту.
zheromo
1. Получаем хтмл код - urllib.urlopen
2. Парсим из него нужные значения (неоднократно обсуждалось на этом форуме)
3. Отличаются ли они от предыдущих
Если да
4. Сохраняем значения
5. Посылаем письмо об этом - smtplib
6. ПРОФИТ

Какой из этих пунктов вызывает затруднения?
esal
А как разместить скрипт в директории сайта, чтобы можно было прикрутить ему веб интерфейс с парой кнопочек для запуска и остановки ну и чтобы выводилось значение (которое парсили) на странице.
Что тут почитать, использовать?
o7412369815963
>А как разместить скрипт в директории сайта, чтобы можно было прикрутить ему веб интерфейс
раз есть какой-то сайт на который нужно выводить, то я бы просто выкусывал нужный html (запуск по крону, либо демоном), ложил в файлик, а движок сайта при отрисовке страницы его вставлял бы куда надо.
doza_and
“А как разместить скрипт в директории сайта”
Не очень понятно в чем проблема? Те это сайт ваш или в интернете, из которого изменения? я так понял что в интернете.
Кроме сказанного o7412369815963 я бы добавил что вы наверное захотите отслеживать несколько значений. Соответственно система должна включать
1 базу идентификаторов того что вы хотите мониторить. Наверное список пар - url+ regex или кусок кода для выделения значения из странички и наверное символьное название чтобы не запутаться.
2 базу истории изменения этих параметров, или по крайней мере прошлое значение.
Система не очень сложная помоему, но требует аккуратной реализации (учитывая автозапуск и синхронизацию при добавлении новых контролируемых адресов).
Поэтому лучше если вы приведете ваши попытки. Можете писать в личку если что.
esal
Тогда такой вопрос:
Как парсить данные с сайта, который требует авторизации. То есть чтобы просмотреть информацию нужно ввести логин и пароль. Без авторизации ничего интересного не увидишь. Как парсить данные с авторизацией в запросе? Подскажите какие нибудь простые и проверенные способы?
zheromo
esal
Как парсить данные с сайта, который требует авторизации.
Очень просто - обычно авторизация основана на куках (если там Basic или Digest авторизация - то все намного проще), поэтому достаточно просто хранить и передавать куки между запросами. Ну и соответственно сделать POST запрос с данными, необходимыми для авторизации.
esal
Можно пример какой нибудь, например для сайта Ярушки (ya.ru). Из за авторизации точнее ее отсутствия много информации не видно.
Можно пример какой то с использованием авторизованного запроса.
zheromo
    headers = {
'Host': HOST,
'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'ru,en-us;q=0.7,en;q=0.3',
'Accept-Encoding': 'deflate',
'Accept-Charset': 'windows-1251,utf-8;q=0.7,*;q=0.7',
'Keep-Alive': '115',
'Connection': 'keep-alive',
'Cookie': 'lang=english',
'Cache-Control': 'max-age=0',
'Content-Type': 'application/x-www-form-urlencoded',
}

cred_data = {}
cred_data['login'] = login
cred_data['password'] = password
body = urllib.urlencode(cred_data)
headers['Content-Length'] = str(len(body))

conn = httplib.HTTPConnection("%s:%s" % (HOST,PORT,))
conn.request("POST", cred_url, body, headers)
response = conn.getresponse()
cookie = response.getheader('set-cookie', '')
conn.close()

headers['Cookie'] = cookie
conn = httplib.HTTPConnection("%s:%s" % (HOST,PORT,))
headers['Content-Length'] = 0
conn.request("GET", data_url, "", headers)
response = conn.getresponse()
data = response.read()
conn.close()
esal
Спасибо)
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