Python и SEO

Архив Май, 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)

Автор: kalombo

Май 29th, 2010 at 1:39 пп

Категория: Разное

Снова про кодировки.

комментарии: 6

Прочитал статью. Насчет кодировок в голове всё становится яснее и яснее=) До этого момента в консоль на английском языке сообщения выводил, не хотел связываться. Оказывается всё просто — необходимо получить из строки объект типа юникод и написать print объект.  И совсем необязательно вытворять танцы с кодом типа decode(‘utf8′).encode(‘cp866′).

Автор: kalombo

Май 23rd, 2010 at 10:39 пп

Категория: Python,Разное

Tagged with decode, encoding,

Генерация 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)

Автор: kalombo

Май 19th, 2010 at 5:00 пп

Категория: Python,Seo,Разное

Tagged with , sitemap, xml