{#
{% 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 %}
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]
. Это 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)
import StringIO
from xml.sax.saxutils import XMLGenerator
def create_sitemap(cnagfreq,priority,*links):
st = StringIO.StringIO()
g = XMLGenerator(st,encoding="UTF-8")
g.startDocument()
g.startElement('urlset', {'xmlns':"http://www.sitemaps.org/schemas/sitemap/0.9"})
for lnk in links:
g.characters("\n")
g.startElement("url", {})
g.characters("\n")
g.startElement("loc", {})
g.characters(lnk)
g.endElement("loc")
g.characters("\n")
g.startElement("changefreq", {})
g.characters(cnagfreq)
g.endElement("changefreq")
g.characters("\n")
g.startElement("priority", {})
g.characters(priority)
g.endElement("priority")
g.characters("\n")
g.endElement("url")
g.characters("\n")
g.endElement("urlset")
g.endDocument()
return st.getvalue()
lst = ["http://ya.ru/{0}.html".format(x) for x in xrange(5)]
print create_sitemap("daily","0.8",*lst)