• Почему не запускается сервер на Django?

    deepblack
    @deepblack Куратор тега Django
    Уже отвечал, процитирую ответ:
    spoiler

    Имя хоста написано кириллицей и Python 3.4 или старее?
    Windows: socket.gethostbyaddr(name) fails for non-ASCII hostname
    bugs.python.org/issue26227

    • Обновить Python
    • Переименовать хост
    • Либо запускать Django передав ему ip адрес вместо имени хоста python manage.py runserver 127.0.0.1:8000


    UPD:

    я попробовал воспроизвести подобную ошибку в среде Win 10 (в VirtualBox) и у меня получилось только в случае
    если в файле hosts присутствует алиас с кириллицей и локаль Windows русская.
    spoiler

    5cfb3a55d8bd0793644215.png
    5cfb39ec9a939231168766.png


    Если удалить русский, оставив только английский (на русском только интерфейс системы), то всё ок.

    Так-же не удалось воспроизвести ошибку если при запуске указывать ip хоста как 127.0.0.2
    python manage.py runserver 127.0.0.2:8080
    При условии, что в hosts нет алиаса с кириллицей для него.

    На чистой системе (установлены только Python 3.7.2 и Pycharm Community, русская локаль) подобной ошибки нет.

    Заглянул в исходники socket.py и socketmodule.c
    Скорее всего данная особенность связаны с этой частью исходного кода Python на C, а именно PyUnicode_DecodeFSDefault
    #ifdef MS_WINDOWS
        /* Issue #26227: gethostbyaddr() returns a string encoded
         * to the ANSI code page */
        return PyUnicode_DecodeFSDefault(name);
    #else
        /* Decode from UTF-8 */
        return PyUnicode_FromString(name);
    #endif


    Далее, если имя хоста не написано кириллицей и в hosts нет кириллицы следует вывод, что с высокой долей вероятности дело в стороннем софте(антивирус, кривой кряк и т.д.).


    Итак:
    • Обновить Python
    • Переименовать хост
    • Удалить алиас(ы) в файле hosts
    • Проверить сторонний софт (антивирус, кривой кряк и т.д.)
    • Либо запускать Django передав ему ip адрес вместо имени хоста: python manage.py runserver 127.0.0.1:8000
    • Запустить так: python manage.py runserver 127.0.0.2:8000
    Ответ написан
    3 комментария
  • Как в Scrapy пройти авторизацию?

    @DannyFork
    Указанные в start_urls =[] запрашиваются асинхронно. Вы отправлятете запрос к странице авторизации и контенту одновременно.
    Основная ваша проблема неправильный Post -запрос. Вместо https://ecom.elko.ru/Account/Login должно быть
    https://ecom.elko.ru/Account/Login?ReturnUrl=%2fCatalog%2fCategory%2fSCO


    Вопрос об авторизации,вот рабочий код для ее прохождения.
    import scrapy
    from scrapy.contrib.spiders import CrawlSpider
    
    from scrapy.item import Item, Field
    from scrapy.contrib.loader import XPathItemLoader, ItemLoader
    from scrapy.http import Request, FormRequest
    
    class ScrapyTestItem(scrapy.Item):
        title = Field()
        url = Field()
    
    class ScrapyTestSpider(CrawlSpider):
        name = "catalog"
    
        def start_requests(self):
            return [
                FormRequest(
                    "https://ecom.elko.ru/Account/Login?ReturnUrl=%2fCatalog%2fCategory%2fSCO",
                    formdata={"Username": "ваш_логин", "Password": "ваш_пароль"}
                )]
    
        def parse(self, response):
              print(response.url) 
       # Парсим страницу или отправляем запрос на другие.


    Перенаправление на страницу каталога ecom.elko.ru/Catalog/Category/SCO
    2016-12-18 12:32:55 [scrapy] DEBUG: Redirecting (302) to <GET https://ecom.elko.ru/Catalog/Category/SCO> from <POST https://ecom.elko.ru/Account/Login?ReturnUrl=%2fCatalog%2fCategory%2fSCO>
    Ответ написан
    Комментировать
  • Почему vk_api python долго обрабатывает с stand alone приложением?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Поверхностный взгляд
    На первый взгляд, косяк в числе запросов в одной "пачке" - их можно 25, а у вас всего 11.

    И подозрение на тормоза из-за частоты запросов. Библиотека vk_api, если используется именно она, с ошибками превышения частоты запросов (3 в секунду) поступает просто: откладывает следующую попытку на пол-секунды. См. too_many_rps_handler

    Разумнее считать время самостоятельно и точно укладываться в 3 запроса в секунду.

    Вы пишете про 1200-1800 в секунду, это как-то совсем медленно, учитывая, что первые 33 тысячи то уж точно должно были бы вернуться за первую секунду с тем кодом, что в примере.


    Upd. Попробовал безо всяких питонов прямо на странице приложения ВК создать хранимую процедуру и в ней получать список участников группы. Та же картина. Если только id пользователей – выполняется быстро.
    Стоит добавить поля city и can_write_private_message, как долго думает и вылетает с ошибкой.

    Видимо, надо «понять и простить» ВК, не справляющийся с такой нагрузкой в установленных лимитах времени/ресурсов и бить на меньшие партии, или выполнять доп. запросы.

    Например, если такой парсинг требуется не однократно, а снова и снова, есть смысл кэшировать у себя данные пользователей (надеясь, что они не станут менять город и закрывать/открывать сообщения каждый день) и при повторных запросах сначала получать только id, а потом запрашивать city и can_write_private_message только для новичков.
    Ответ написан
    8 комментариев