{#
{% for parent in (0,) recursive %} это "def func():", а
{{ loop((0,)) }} - это func().
#}
{% for parent in (0,) recursive %}
{% if parents %}
- {{ loop((0,)) }}
{%- endif %}
{% endfor %}
{#
{% for parent in (0,) recursive %} это "def func():", а
{{ loop((0,)) }} - это func().
#}
{% for parent in (0,) recursive %}
class Cidr(postgresql.CIDR):
'''
Делаем свой тип колонки для того, чтобы была возможность использовать
операторы >> и <<
'''
class comparator_factory(postgresql.CIDR.Comparator):
def __lshift__(self, other):
return self.op("<<")(other)
def __rshift__(self, other):
return self.op(">>")(other)
class Net(Base):
__tablename__ = 'nets'
id = Column(Integer, primary_key=True)
ip = Column(Cidr)
db.session.query(Net).filter(Net.ip>>'10.10.10.10')
def valid_response_code(self, code, task):
return True
class MainSpider(Spider):
#initial_urls = ['http://www.google.com/']
def task_generator(self):
url = "http://www.google.com/"
yield Task(name='page', url=url)
from grab.spider import Spider, Task, Data
from grab.tools.logs import default_logging
from grab import Grab
import re
class KinoSpider(Spider):
def task_initial(self, grab, task):
for xpath in grab.tree.xpath('//*/div[@class="stat"]/div/a'):
name = xpath.text_content().encode('utf8')
name = re.sub("\(.*?\)",'',name)
self.out.write(name+"\n")
self.out.flush()
def main():
initial_urls = ["http://www.kinopoisk.ru/level/56/day/2012-02-22/page/{0}/".format(x) for x in xrange(1,51)]
threads = 50
default_logging(grab_log="log/log.txt")
fl = open("out.txt","w")
bot = KinoSpider(thread_number=threads,network_try_limit=2)
bot.initial_urls = initial_urls
bot.out = fl
try: bot.run()
except KeyboardInterrupt: pass
fl.close()
print bot.render_stats()
if __name__ == '__main__':
main()
import sqlalchemy
from sqlalchemy.orm import sessionmaker, scoped_session
connection = "mysql://root:@localhost/mydatabase"
# pool_size - указывает сколько запросов хранить в очереди, если будет больше, вылетит exception
engine = sqlalchemy.create_engine(connection, pool_size=30)
# Создаем объект Session и дальше во всех потоках используем только его.
Session = scoped_session(sessionmaker(bind=engine))
#Accounts - моя таблица, к которой мне нужно делать запросы, код по настройке отображения я опустил.
accounts = Session.query(Accounts)
account = accounts[0]
# -*- coding: utf-8 -*-
import threading, Queue, time
import traceback
class Worker(threading.Thread):
def __init__(self,queue):
threading.Thread.__init__(self)
self.__queue = queue
def run(self):
while True:
try: item = self.__queue.get_nowait() # ждём данные
except Queue.Empty: break # данные закончились, прекращаем работу
try: self.work(item) # работа
except Exception: traceback.print_exc()
time.sleep(0.5)
self.__queue.task_done() # задача завершена
return
def work(self,item):
print item
#pass
def main():
# Выводим в 5 потоков цифры от 1 до 100.
queue = Queue.Queue()
num_threads = 5 # 5 потоков
for x in xrange(100):
queue.put(x) # заносим данные в очередь
for i in xrange(num_threads):
t = Worker(queue) # создаем поток
t.start() # стартуем
time.sleep(0.1) # чтобы в консоли друг на друга не накладывались
queue.join() #блокируем выполнение программы, пока не будут израсходованы данные.
print "Done!"
if __name__ == '__main__':
main()
# -*- coding: utf-8 -*-
import threading, Queue, time
import traceback
class Worker(threading.Thread):
def __init__(self,queue):
threading.Thread.__init__(self)
self.__queue = queue
self.kill_received = False # флаг прекращения работы
def run(self):
while not self.kill_received:
try: item = self.__queue.get_nowait() # ждём данные
except Queue.Empty: break
try: self.work(item)
except Exception: traceback.print_exc()
time.sleep(0.5)
self.__queue.task_done() # задача завершена
self.__queue.put(item) # зациклим
return
def work(self,item):
print item
def main():
queue = Queue.Queue()
num_threads = 5 # 5 потоков
threads = []
for x in xrange(100):
queue.put(x) # заносим данные в очередь
for i in xrange(num_threads):
t = Worker(queue) # создаем нить
threads.append(t)
t.start() # стартуем
time.sleep(0.1)
#Пока в "живых" не останется только главный поток, ждем.
while threading.activeCount()>1:
try:
time.sleep(1)
except KeyboardInterrupt:
print "Ctrl-c received! Sending kill to threads..."
for t in threads:
t.kill_received = True # даем сигнал о завершении всем потокам
print "Done!"
if __name__ == '__main__':
main()
# coding: utf8
import spynner
from spynner import browser
import multiprocessing
from multiprocessing import Process
class Serfer(multiprocessing.Process):
def __init__(self,queue):
multiprocessing.Process.__init__(self)
self.__queue = queue # наша очередь заданий
self.kill_received = False # На всякий случай переменная, вдруг надо будет всё остановить
def run(self):
while not self.kill_received:
try: item = self.__queue.get_nowait() # ждём данные
except Queue.Empty: break
error = True
try: error = self.serfing(item)
except: traceback.print_exc()
time.sleep(0.1)
self.__queue.task_done() # задача завершена
if error: self.__queue.put(item) # Если была ошибка, то еще раз с этими данными
return
def serfing(self,url):
br = browser.Browser() # запускаем браузер
br.create_webview()
br.show() # отображаем
br.load(url) # загружаем страницу
br.wait_a_little(75)
br.destroy_webview()
br.close() # закрываем браузер
def main():
queue = multiprocessing.JoinableQueue() # создаем очередь заданий
processes = 5
# Урлы по которым надо будет перейти в браузере
urls = ["http://ya.ru","http://google.ru","http://yahoo.com",
"http://bing.com","http://rambler.ru"]
for url in urls:
queue.put(url) # заносим данные в очередь
for i in xrange(processes):
t = Serfer(queue) # создаем процесс
t.start() # стартуем
time.sleep(0.1)
queue.join() # приостанавливаем дальнейшее выполнение кода, пока очередь не опустошится
print "Done"
if __name__ == '__main__':
main()
=80=D0=BE=D0=B2=D0=B0=D0=BB=D0=B8 =D1=83=D1=87=D1=91=D1=82=D0=BD=D1=83=D1=
=8E =D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D1=8C =D0=B2 =D0=A2=D0=B2=D0=B8=D1=82=D1=
import quopri
s = '''=D0=95=D1=81=D0=BB=D0=B8 =D0=B2=D1=8B =D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B8=
=D0=BB=D0=B8 =D1=8D=D1=82=D0=BE =D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=
=D0=B8=D0=B5 =D0=BF=D0=BE =D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B5, =D0=B8 =D0=
=B2=D1=8B =D0=BD=D0=B5 =D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B8=D1=
=80=D0=BE=D0=B2=D0=B0=D0=BB=D0=B8 =D1=83=D1=87=D1=91=D1=82=D0=BD=D1=83=D1=
=8E =D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D1=8C =D0=B2 =D0=A2=D0=B2=D0=B8=D1=82=D1=
=82=D0=B5=D1=80=D0=B5, =D0=BF=D1=80=D0=BE=D0=B9=D0=B4=D0=B8=D1=82=D0=B5 =D0=
=BF=D0=BE =D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B5:
http://twitter.com/account/not_my_account/sdfaasdfldfjlas/65558-5ED38-131=
666'''
print quopri.decodestring(s).decode('utf8')
Если вы получили это сообщение по ошибке, и вы не регистрировали учётную запись в Твиттере, пройдите по ссылке:
http://twitter.com/account/not_my_account/sdfaasdfldfjlas/65558-5ED38-131666
import base64
body = base64.b64decode(body)
conn = TorCtl.connect()
conn.sendAndRecv('signal newnym\r\n')
module = "common_module" // название файла модуля
dyn_module = __import__(module)
Class = dyn_module.Dyn_Class // Dyn_Class - класс из модуля
import sys
import pycurl
try:
import signal
from signal import SIGPIPE, SIG_IGN
signal.signal(signal.SIGPIPE, signal.SIG_IGN)
except ImportError:
pass
key = config.get("Basic","Key")
ns1 = config.get("Domains","NS1")
ns2 = config.get("Domains","NS2")
class ConfigDict(object):
def __init__(self,path):
config = ConfigParser.RawConfigParser()
config.read(path)
for section in config.sections():
dct = {}
for option in config.options(section):
dct[option] = config.get(section,option)
self.__setattr__(section,dct)
def main():
conf = ConfigDict("settings.cfg")
threads = conf.Basic['threads']
ns1 = conf.Domains['ns1']
if __name__ == '__main__':
main()
[Basic]
THREADS = 1 ; потоки
[Domains]
NS1 = ns1.0adz.com
# userpwd = "login:parol"
curl.setopt(pycurl.USERPWD,userpwd)
size = os.path.getsize(path)
fp = open(path,"rb")
# url = ftp://ftp.host.com/directory/file.txt
curl.setopt(pycurl.URL,url)
curl.setopt(pycurl.UPLOAD,1)
curl.setopt(pycurl.INFILE,fp)
curl.setopt(pycurl.INFILESIZE,size)
curl.perform()
quote = "MKD {0}".format(folder)
curl.setopt(pycurl.URL,host)
curl.setopt(pycurl.POSTQUOTE,[quote])
curl.setopt(pycurl.UPLOAD,0)
curl.perform()
# добавление папки в которой искать модули
sys.path.append(path)
# определение директории файла
os.path.dirname(path)
# смена рабочей директории
os.chdir(directory)
# переменная, в которой хранится путь до текущего скрипта
__file__
# делаем, чтобы все относительные пути
# вычислялись относительно пути до скрипта
os.chdir(os.path.dirname(__file__))
. Это png-изображение с размерами 90x25. То есть каждый символ занимает 18 пикселей, всего 5 символов. Весь алфавит этой капчи состоит из 16 символов: 0123456789abcdef. Таким образом мне пришлось собрать все картинки для этого алфавита, нарезать из них буковки, а затем склеить в одну картинку:
. Ну и весь алгоритм сводится к тому, чтобы сравнивать все символы по очереди с алфавитом. Для этого я воспользовался библиотекой PIL:from PIL import Image, ImageColor
def cmp_image(img1,img2):
return list(img1.getdata()) == list(img2.getdata())
def decode(img):
# Весь алфавит
bigimg = Image.open(r"all.png")
# Соответсвие букв изображениям
alpha = "0123456789abcdef"
res = ""
for x in xrange(5):
tmp = Image.new('RGB', (18, 25))
tmp.paste( img.crop((x*18,0,x*18+18,25)))
letter = "a"
for y in xrange(16):
ideal = Image.new('RGB', (18, 25))
ideal.paste(bigimg.crop((y*18,0,y*18+18,25)))
rms = cmp_image(ideal,tmp)
if rms:
letter = alpha[y]
break
res += letter
return res
img = Image.open(r"e:\image.png")
print decode(img)