Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 21, 2013 18:31:02

qb
Зарегистрирован: 2013-01-21
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как подключить и исползовать встроеную библиотеку?

Начал изучать Python (v3.3), разумеется решил что-нибудь попробовать.
Так сказать почувствовать основы языка решил с помощью решения следующей задачи, однако уперся в непонимание.

0) С неким интервалом (допустим пять минут), выполнять следующие действия
1) Открыть/прочитать (без участия браузера) или сохранить, некую указанную веб страницу
2) Найти на ней фрагмент текста и сравнить с заданным
3) Если текст совпадает, то в консоли вывести одно сообщение, если не совпадает другое
4) Если страница была сохранена, то удалить ее

А теперь собственно вопрос, как для начала хотя бы получить страницу и вывести сообщение о ее получении?(пункт один и три)
И хотелось бы получить подсказу как осуществить поиск (что нужно использовать) по тексту/файлу HTML с учетом тегов, и каким образом реализовать таймер?
Насколько я понял в третьем питоне нужно использовать библиотеки html и urllib, но как их задействовать, для меня загадка, из найденых примеров в интернете я так ничего и не понял.

П.С. В программировании не то чтобы ноль, но и не единица, с основными понятиями уже познакомился.

Офлайн

#2 Янв. 21, 2013 19:15:39

neo08
От:
Зарегистрирован: 2008-08-01
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Как подключить и исползовать встроеную библиотеку?

qb
А теперь собственно вопрос, как для начала хотя бы получить страницу?
>>> import urllib
>>> f = urllib.urlopen('http://www.google.com')
>>> text = f.read()



Офлайн

#3 Янв. 21, 2013 21:15:56

qb
Зарегистрирован: 2013-01-21
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как подключить и исползовать встроеную библиотеку?

neo08
Спасибо, понятно.

Офлайн

#4 Янв. 21, 2013 21:23:26

qb
Зарегистрирован: 2013-01-21
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как подключить и исползовать встроеную библиотеку?

Вот что уменя получилось.

# -*- 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')# Удаление файла
Однако судя повсему, даже если отбросить тот пример текста который ищется и сравнивается, поиск у меня не работает (фрагмент между звездачками, по крайней мере я это вижу примерно так).

Поэтому другой вопрос, как сделать правильно поиск?
И как сделать цикличность/повторение с заданным интервалом (к примеру в пять минут) этих дейсвий?

Офлайн

#5 Янв. 21, 2013 23:01:50

Frog-king
Зарегистрирован: 2012-11-30
Сообщения: 31
Репутация: +  1  -
Профиль   Отправить e-mail  

Как подключить и исползовать встроеную библиотеку?

1. Зачем тебе эта кодировка? почему не utf-8?
2. Если не суть важно, тогда не надо сохранять код сайта в файл, а потом снова его читать ( можешь работать с переменной text).
3. Почитать где-нибудь как работать с ре (re) про re.compile() и findall()
4. Думается, если у тебя цель определить “Зону”, но нужно идти по другому пути.
5. Зачем тебе это все зацикливать?

import time
while True: # будет вечно жить
      Твой код
      time.sleep(300)
6. …..

Офлайн

#6 Янв. 22, 2013 11:57:01

qb
Зарегистрирован: 2013-01-21
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как подключить и исползовать встроеную библиотеку?

Frog-king
1. Зачем тебе эта кодировка? почему не utf-8?2. Если не суть важно, тогда не надо сохранять код сайта в файл, а потом снова его читать ( можешь работать с переменной text).3. Почитать где-нибудь как работать с ре (re) про re.compile() и findall()4. Думается, если у тебя цель определить “Зону”, но нужно идти по другому пути.5. Зачем тебе это все зацикливать?
1 Кодировка не критична (если только от нее не зависит кодировка текста, который ищется и сравнивается со страницей/ данными в другой кодировке).
Просто в третьем питоне код не работает (наверное, из-за неправильного использования библиотеки urllib, во 2-ом питоне их две, а в 3-ем они объединены в одну)
2 Сохранять страницу в файл не важно, однако для понимания работы с файлами и того что происходит и где, было решено это записать в файл и уже работать с ним.
Попробую поработать просто с переменной
2,4,5 Суть ни в необходимости определении зоны, не в зацикливании, и не в сохранении и чтении файла, а в том чтобы на одном примере по максимуму понять,
как работать и как работает язык программирования, так как я только начал изучать программирование, плюс, думаю это хороший пример для других новиков, которые начинают делать первые шаги в программировании.

А конкретно в этом примере, как минимум демонстрируется, как получать какие либо данные/текст (здесь из веб страницы без работы с формами), записывать их в файл, читать, производить по ним поиск, и физически влиять на файл (его к примеру потом можно куда-нибудь переместить или удалить).

Офлайн

#7 Янв. 22, 2013 12:08:14

qb
Зарегистрирован: 2013-01-21
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как подключить и исползовать встроеную библиотеку?

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 секунд
Только непонятно почему или из-за чего с одним правильным оперратором ( == сравнения ) работает вроде не правильно, с другим непрвильным ( != отрицание ) , работает правильно.
Как именно обрабатывается содежимое и сама переменная findText?

Отредактировано qb (Янв. 22, 2013 12:09:56)

Офлайн

#8 Янв. 22, 2013 12:47:18

Frog-king
Зарегистрирован: 2012-11-30
Сообщения: 31
Репутация: +  1  -
Профиль   Отправить e-mail  

Как подключить и исползовать встроеную библиотеку?

Дело твоё, но не кажется что учится лучше тоже не на абстрактных задачах ( что-то там делается просто так) , а на более менее конкретных: можно начать с математических, а можно например парсить сайты погоды, доставать погоду на понедельник и записывать всё в sqlite, можно игрушку написать(как я), а можно что-нибудь ещё смотря что тебе по вкусу.
А конкретно по коду это всё к старому:
searchText = re.search('searchText1','searchText2') - эта функция ищет “searchText1” в “searchText2” и соответственно не находит ( вместо “searchText” должно быть content наверное
outputPage.close()#Закрытие файла - ты наверное напутал outputPage ты уже закрыл закрывать надо text.txt

А что не работает при utf-8, что пишет?

Отредактировано Frog-king (Янв. 22, 2013 12:50:21)

Офлайн

#9 Янв. 22, 2013 13:02:57

Frog-king
Зарегистрирован: 2012-11-30
Сообщения: 31
Репутация: +  1  -
Профиль   Отправить e-mail  

Как подключить и исползовать встроеную библиотеку?

re.findall( “Россия”, text) # text без кавычек
findText - список который будет содержать столько элементов сколько он нашел в тексте.
соответственно можешь делать проверку - если длина списка == 0 тогда не нашел, != нашел.

Я не разбираюсь в кодировках, но мне кажется что так как у тебя работать не будет( но я могу ошибаться)

Офлайн

#10 Янв. 22, 2013 13:08:00

qb
Зарегистрирован: 2013-01-21
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как подключить и исползовать встроеную библиотеку?

Frog-king
Игры и парсеры сайтов это в будущем, для меня сейчас важно понять как работает язык.
В 3.3 проблемы не в кодировке (трейтий питон умет работать с кирилицей), пишет invalid syntax - это скорее в коде, а в 2.7 кирилица в utf-8 некоректно отображается.
А почему опрераторы (там где знаки вопроса), работают как-то не пологике.
И как правильно, так (text в кавычках)
findText = re.findall('Россия', 'text')
или без ковычек, при обоих ваирантах результат работы кода вроде не меняется
findText = re.findall('Россия', text)

Кстати про погоду и sqlite это интересно, надо попробывать.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version