Форум сайта python.su
0
Начал изучать Python (v3.3), разумеется решил что-нибудь попробовать.
Так сказать почувствовать основы языка решил с помощью решения следующей задачи, однако уперся в непонимание.
0) С неким интервалом (допустим пять минут), выполнять следующие действия
1) Открыть/прочитать (без участия браузера) или сохранить, некую указанную веб страницу
2) Найти на ней фрагмент текста и сравнить с заданным
3) Если текст совпадает, то в консоли вывести одно сообщение, если не совпадает другое
4) Если страница была сохранена, то удалить ее
А теперь собственно вопрос, как для начала хотя бы получить страницу и вывести сообщение о ее получении?(пункт один и три)
И хотелось бы получить подсказу как осуществить поиск (что нужно использовать) по тексту/файлу HTML с учетом тегов, и каким образом реализовать таймер?
Насколько я понял в третьем питоне нужно использовать библиотеки html и urllib, но как их задействовать, для меня загадка, из найденых примеров в интернете я так ничего и не понял.
П.С. В программировании не то чтобы ноль, но и не единица, с основными понятиями уже познакомился.
Офлайн
0
qb>>> import urllib
А теперь собственно вопрос, как для начала хотя бы получить страницу?
Офлайн
0
neo08Спасибо, понятно.
Офлайн
0
Вот что уменя получилось.
# -*- coding: cp1251 -*- import urllib import re import os f = urllib.urlopen('http://google.com/')# Страница получена и отправлена(отправлена ли? или помещена) в переменную f text = f.read()# То что хранится в f записано в память переменной text outputPage = open('text.txt', 'w')# Открывается/создается файл text.txt на запись outputPage.write(text)# В него записывается значение переменной text outputPage.close()# Файл закрывается для сохранения записаного content = open('text.txt', 'r').read()# Открывается файл text.txt на чтение Text1 = 'google.com' # Создается переменная с 1 исходным текстом Text2 = 'google.ru' # Создается переменная с 2 исходным текстом #******************** searchText = re.search('searchText1','searchText2') if searchText == Text1 and searchText!= Text2 : print 'Зона .com' elif searchText != Text1 and searchText== Text2: print 'Зона .ru' #******************* outputPage.close()#Закрытие файла os.remove('text.txt')# Удаление файла
Офлайн
1
1. Зачем тебе эта кодировка? почему не utf-8?
2. Если не суть важно, тогда не надо сохранять код сайта в файл, а потом снова его читать ( можешь работать с переменной text).
3. Почитать где-нибудь как работать с ре (re) про re.compile() и findall()
4. Думается, если у тебя цель определить “Зону”, но нужно идти по другому пути.
5. Зачем тебе это все зацикливать?
import time while True: # будет вечно жить Твой код time.sleep(300)
Офлайн
0
Frog-king1 Кодировка не критична (если только от нее не зависит кодировка текста, который ищется и сравнивается со страницей/ данными в другой кодировке).
1. Зачем тебе эта кодировка? почему не utf-8?2. Если не суть важно, тогда не надо сохранять код сайта в файл, а потом снова его читать ( можешь работать с переменной text).3. Почитать где-нибудь как работать с ре (re) про re.compile() и findall()4. Думается, если у тебя цель определить “Зону”, но нужно идти по другому пути.5. Зачем тебе это все зацикливать?
Офлайн
0
Frog-kingСпасибо за цикл.
import urllib import re import os import time while True: # будет вечно жить f = urllib.urlopen('http://google.ru/')# Страница получена и помещена в переменную f text = f.read()# То что хранится в f записано в память переменной text findText = re.findall('Россия', 'text') if findText !='Россия':#?????????????????? print 'зона ру' else: print 'не зона ру' f = urllib.urlopen('http://google.by/')# Страница получена и помещена в переменную f text = f.read()# То что хранится в f записано в память переменной text findText = re.findall('Беларусь', 'text') if findText =='Беларусь':#????????????????? print 'зона bу' else: print 'не зона bу' time.sleep(30)# Цикл не активен 30 секунд
Отредактировано qb (Янв. 22, 2013 12:09:56)
Офлайн
1
Дело твоё, но не кажется что учится лучше тоже не на абстрактных задачах ( что-то там делается просто так)
, а на более менее конкретных: можно начать с математических, а можно например парсить сайты погоды, доставать погоду на понедельник и записывать всё в sqlite, можно игрушку написать(как я), а можно что-нибудь ещё смотря что тебе по вкусу.
А конкретно по коду это всё к старому:
searchText = re.search('searchText1','searchText2') - эта функция ищет “searchText1” в “searchText2” и соответственно не находит ( вместо “searchText” должно быть content наверное
outputPage.close()#Закрытие файла - ты наверное напутал outputPage ты уже закрыл закрывать надо text.txt
А что не работает при utf-8, что пишет?
Отредактировано Frog-king (Янв. 22, 2013 12:50:21)
Офлайн
1
re.findall( “Россия”, text) # text без кавычек
findText - список который будет содержать столько элементов сколько он нашел в тексте.
соответственно можешь делать проверку - если длина списка == 0 тогда не нашел, != нашел.
Я не разбираюсь в кодировках, но мне кажется что так как у тебя работать не будет( но я могу ошибаться)
Офлайн
0
Frog-kingИгры и парсеры сайтов это в будущем, для меня сейчас важно понять как работает язык.
findText = re.findall('Россия', 'text')
findText = re.findall('Россия', text)
Офлайн