Архив Май, 2010
Распознавание captcha.
комментарии: 5
Решил я научиться распознавать самую простую капчу, какая только существует. Вот она:. Это 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)
Снова про кодировки.
комментарии: 6
Прочитал статью. Насчет кодировок в голове всё становится яснее и яснее=) До этого момента в консоль на английском языке сообщения выводил, не хотел связываться. Оказывается всё просто — необходимо получить из строки объект типа юникод и написать print объект. И совсем необязательно вытворять танцы с кодом типа decode(‘utf8′).encode(‘cp866′).
Генерация xml карты.
комментарии: 3
Иногда требуется сгенерировать xml карту для заданных ссылок. Сначала делал это за счет метода строки format, но вот решил попробовать модуль для работы с xml и набросал простенькую функцию:
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)