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

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

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

П.С. В программировании не то чтобы ноль, но и не единица, с основными понятиями уже познакомился.
neo08
qb
А теперь собственно вопрос, как для начала хотя бы получить страницу?
>>> import urllib
>>> f = urllib.urlopen('http://www.google.com')
>>> text = f.read()
qb
neo08
Спасибо, понятно.
qb
Вот что уменя получилось.
# -*- 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')# Удаление файла
Однако судя повсему, даже если отбросить тот пример текста который ищется и сравнивается, поиск у меня не работает (фрагмент между звездачками, по крайней мере я это вижу примерно так).

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

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

А конкретно в этом примере, как минимум демонстрируется, как получать какие либо данные/текст (здесь из веб страницы без работы с формами), записывать их в файл, читать, производить по ним поиск, и физически влиять на файл (его к примеру потом можно куда-нибудь переместить или удалить).
qb
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?

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

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

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

Кстати про погоду и sqlite это интересно, надо попробывать.
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