Если честно, то если бы на ачате были разделы скриптовые и компиллируемые языки, то так бы оно и было, а так то деление получается на усмотрение модератора, выходит что тема для тех кто начинает на нем программировать торчит в разделе C/C#, а вопрос/ответ в PHP/PERL непохек =/
поиск по античату - авторизация вконтакте на python и cgi - De-Visible положил готовую функцию для авторизации
Зачем? Хороший пример есть в документации. К тому же, я считаю, чтоб писать маны какие-то по программированию, надо самому быть спецом в данной теме. Я себя таковым пока не считаю...
Я себя тоже не считаю спецом, но когда тебе долбят асю по 3 раза в день с вопросами такого содержания : "А я вот тут вот кароче знаю PHP, вчера установил Python и вот тут кароче нужно многопоточность прикрутить к скрипту, но CURL я типа юзать не хочу, так как это не многопоточность". Тогда приходится ставать спецом по Python и писать статьи по многопоточности, причем именно с Queue так как люди не хотят врубаться даже в понятие замка, и если честно, то Queue я уже давненько не использовал ибо незачем, это тот же самый список с замками, своих аналогов можно написать вагон и тачечку сверху. Вот только если уж начал, то договаривай - чем же нерационально использование Queue в таком случае ?
эйй...всех с трауром во первых..=) далее.. Мне вот надо найти на .php странице определенную строку(ну это контакт как бэ wall.php) строка 114: <div class="summary">Показаны записи 1 - 20 из 2710.</div> и записать это в переменную...
Отпарси регуляркой: Code: result = re.search(r"<div class="summary">(.+?)</div>", page_data) print(result.groups())
Code: import re page = urllib.urlopen("http://www.vkontakte.ru/wall.php").read() peremennaya = re.findall(r"\<div class\=\"summary\"\>(.*?)\<\/div\>", page)[0] print peremennaya
Например так: Code: >>> value = 123 >>> 'value' in globals() True >>> 'value1' in globals() False также если в функции, то можно применить locals()
вот..доделал, проверка стены)) на новое сообщение, пок..без всяких оповещений..просто с текстом New Message..плиз оцените, это мой первый скрипт...) Code: import urllib2, urllib import cookielib import re, time import string #from urllib2 import urlopen ######################## # Satan Wall 1.0(final) # ######################## Email = '[email protected]' #мыло pas = 'win7' #пасс SiteWall = 'http://vkontakte.ru/wall.php?id=7' # ид стены #начало подключение def connect(): #создадим отдельную функцию для подключения, в дальнеишем может пригодиться) cookie = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) urllib2.install_opener(opener) headers = {"User-Agent" : "Mozila/4.0 (compatible; MSIE 5.5; WindowsNT)"} page=urllib2.urlopen(urllib2.Request('http://vkontakte.ru/login.php?email='+Email+'&pass='+pas,None,headers)).read() print 'On-line' #подключились =) #первая проверка стены tempVK = 0 #переменная для первого подключения Error = 0 #счетчик ошибок def WallOn(wall): #функция самой проверки time.sleep(5) #пауза в 5 секунд, а куда торопиться?!)) # NewWall = wall #ровняем старую стенку новой и... NewWalltemp = urllib2.urlopen(SiteWall).read() #...открываем стенку NewWall = re.findall(r"\<div class\=\"summary\"\>(.*?)\<\/div\>", NewWalltemp)[0] # print 'god, ', NewWall проверка, для отладки if wall == NewWall: #проверяем есть ли разница между первым и вторым значением стены, промежуток..кххм) WallOn(wall) #если всё так же, вызываем эту же функцию..вдруг всё же напишут xD else: #но если написали print 'New message' #говорим сразу мне walltemp = urllib2.urlopen(SiteWall).read() wall = re.findall(r"\<div class\=\"summary\"\>(.*?)\<\/div\>", walltemp)[0] # wall = NewWall #записывем новую стену заместо старой) NewWall = 'clear' #и очишаем переменную, чтобы не повторялось каждые 15 секунд о новом сообщений) WallOn(wall) #запустим функцию заново =) def body(tempVK, Error): if tempVK == 0: #если это первоая проверка, то записываем в переменную значиение стенки) walltemp = urllib2.urlopen(SiteWall).read() #вот так вот это делаем) wall = re.findall(r"\<div class\=\"summary\"\>(.*?)\<\/div\>", walltemp)[0] # print 'ok, ', wall #приверка, для отладки tempVK = 1 #гооврим прямо, на сегодня хватит) WallOn(wall) #и вызовим функцию =)) else: #если же это уже не первая проверка, и произошла какая то ошибка, то... walltemp = urllib2.urlopen(SiteWall).read() wall = re.findall(r"\<div class\=\"summary\"\>(.*?)\<\/div\>", walltemp)[0] Error += 1 #прибавляем счетчику ошибок число print 'Error: ', Error #и в слезах жалуемся мне)) WallOn(wall) #...передаем параметр стены ###########НАЧАЛО КАК НЕ СТРАННО ТУТ, В КОНЦЕ!!!############## connect() #вызовем функцию, тоесть начнем соединение body(tempVK, Error) #проверим стену первый раз эм...первый скрипт =)) всем спс за помощь =))
Ок, раз тебе интересно, поясню. В том скрипте в очередь помещается 250 практически идентичных кортежей, затем поточная функция вытягивает их по-одному и использует. Но зачем? Вся эта почти одинаковая инфа ведь зазря отъедает память процесса. Можно было бы обойтись простым итератором в поточной функции, ведь его содержимое (кортежа) заранее известно. Нужно лишь использовать Lock на строке с итерацией (что, вообще говоря, элементарно как в использовании, так и для понимания). Queue хорош в гораздо более сложных случаях - например, когда ты "демонизируешь" несколько потоков для обработки ими каких-то данных, а данные эти, например, могут поступать из другого процесса, и т.п...
Эх, я-то думал дейстивтельно что-то серьезное Обьясню -я использую Queue по-разному, одним из таких случаев было когда у меня отдельный поток обрабатывал его наполнение и создавалась динамическая подгрузка из файла В случае проблем с соединением строка добавлялась обратно в Queue, то что там тебе так не понравилось это : 1) Учебный пример, я лично считаю что в учебных примерах абсолютно пофигу на нагрузку, так как он должен быть читабельнее 2) Это заранее закидон в ту сторону чтобы сразу смотреть в сторону Queue, тот кто понял о чем там написано, тот и поймет недостатки примера, а уников которые любят скопипиздить и всунуть пару своих изменений ожидает глубокое разочарование - так как для реального использования пример не покатит. P.S. Очень дохера таких уников
login999 Я бы может и поспорил с тобой насчет того, какими должны быть учебные примеры, но это, как я уже понял, бессмысленно...
Изучаю питон и не как не могу разобраться с регулярным выражением. Помогите пожалуйста разобрать строку "textone:texttwo" что бы строка до двоеточия была в одной переменной и после двоеточия во второй переменной. Заранее благодарю.
R[00]T1X Не забивайте гвозди микроскопом Code: str = "textone:texttwo" a,b = str.split(':',1) print a, '-', b Но если очень хочется: Code: import re str = "textone:texttwo" a, b = re.search('(?msi)([^:]+):(.+)',str).groups() print a, '-', b