Python и SEO

Рекурсия с помощью рекурсивного цикла в jinja2.

Код выводит «дерево-лесенку» в виде списка, каждая «ступенька» которой находится в списке parents.

{# 
        {% for parent in (0,) recursive %} это "def func():", а
        {{ loop((0,)) }} - это func().
#}
{% for parent in (0,) recursive %}
        
  • {{ parents.pop() }} {% if parents %}
    {{ loop((0,)) }}
    {%- endif %}
{% endfor %}
 

Автор: kalombo

Июль 12, 2019 в 3:56 пп

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

Метки: flask, jinja2, рекурсия

Комментарии: 0

Cоздание собственных операторов в sqlalchemy

В postgresql есть такие типы данных как INET, CIDR, но полноценно в sqlalchemy они не поддерживаются. То есть, например, запрос для поиска подсетей
SELECT * FROM nets WHERE ip >> ’10.10.10.10′ так просто сформулировать на sqlalchemy не получится. Для этого нужно переопределить оператор >> у типа данных CIDR и создавать запросы с его помощью:

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')
 

Автор: kalombo

Июль 12, 2019 в 3:52 пп

Категория: Python,sql

Метки: cidr, inet, postgresql, sql, sqlalchemy

Комментарии: 0

http-снифферы.

Только Windows:

  1. HttpAnalyzer — классный сниффер, есть все необходимые плюшки для http-сниффера: «pretty» отображение POST DATA; возможность открыть ответ на запрос в браузере; плюс, это не debugging proxy, а значит можно дебажить работу скриптов через прокси/соксы, т.к. перехватываются все запросы. Из минусов: платный; подвисает при остановке сниффинга; открытие ответа частенько тупит и открывается не браузер, а блокнот, разобраться почему так происходит у меня не вышло.
  2. Fiddler — это как раз таки debugging proxy, то есть является проксей через которую надо направлять запросы, которые хотим увидеть. То есть отдебажжить запросы скрипта через прокси не получится, зато нет остальных минусов HttpAnalyzer-а, а остальные плюшки присутствуют. После HttpAnalyzer-а перешел на этот сниффер, удобно, полностью устраивает.

Linux (в общем то, кросплатформенное):

  1. Charles — неплохой proxy, если бы не одно «НО», нельзя открыть ответ запроса в браузере, приходилось брать ответ, сохранять его как html и открывать в firefox. Платный, если бы не извращение с сохранением html можно было бы даже купить.
  2. Paros proxy, burp proxy и т.д… - когда искал сниффер под Linux находил кучу этих проксей/снифферов, уже не помню что там и как, разве что burp proxy можно попробовать посмотреть.
  3. Webscarab — похоже вот оно, сниффер под Linux, не идеальный и не такой удобный как fiddler, но с которым вроде бы можно работать. Вроде бы — потому что практики с ним не было, пока только поверхностный обзор. Первый минус что бросился в глаза — нельзя очистить окно от запросов, а в остальном терпимо. А, ну, внешний вид УГ — Java чо)

Прочее:

  1. HttpFox — плагин для фаерфокса, очень похожий на HttpAnalyzer, юзабелен, но снифит только браузер.
  2. CommView — прикольный сниффер общего назначения, начинал с него. Платный, windows only.
  3. Wireshark — классика вроде бы, кроссплатформенен, плотно работать с ним не приходилось.

 

 

Автор: kalombo

Февраль 28, 2019 в 10:48 дп

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

Метки: debugging proxy, сниффер

Комментарии: 0

Памятка по обновлению libcurl Debian.

Памятка примерная, без команд, названия пакетов неточные.

1) Скачал курл с оф. сайта, скомпилил, установил.

2) Удалил libcurl3-gnutls и libcurl3.

3) Установил пакеты python-dev и libcurl-openssl-dev.

4) pip install pycurl. Получил pycurl с последней версией libcurl, а также с openssl вместо gnutls. Не знаю, что лучше, просто openssl было привычнее, плюс какая-то ошибка была у gnutls.

 

Автор: kalombo

Ноябрь 13, 2018 в 11:56 пп

Категория: Python

Метки: , ,

grab.spider tricks.

1) Дефолтный valid_status для всех заданий. Нужно переопределить метод valid_response_code, например таким образом:

def valid_response_code(self, code, task):
    return True

В данном примере все ответы будут считаться валидными.

2) Список стартовых урл, initial_urls, может оказаться просто ненужным. Чтобы не делать лишнее действие, можно запускать spider не через task_initial, а через task_generator:

class MainSpider(Spider):
    #initial_urls = ['http://www.google.com/']

    def task_generator(self):
        url = "http://www.google.com/"
        yield Task(name='page', url=url)

Это один из способов, но далеко не единственный.

 

Автор: kalombo

Июнь 1, 2018 в 2:58 пп

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