• Расширение таблицы при парсинге?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    В общем, рассказываю про парсинг.

    Код, который видно на странице через инспектор элементов в браузере - это код, который браузер подготовил для пользователя. Открываете сайт - браузер отправлять запрос на сервер. Запрос состоит из метода, пути, заголовков и тела. После первоначального запроса браузер получает от сервера HTML страницу, в которую включено (обычно) множество JS скриптов, которые в процессе выполнения могут создавать дополнительные запросы на сервер для получения дополнительной информации. После выполнения всех действий, пользователь видит в браузере готовый результат, который отличается от первоначального запроса из-за дополнительных джаваскриптов.

    Если элемент (класс, id, и тд) видно в инспекторе браузера - это не означает, что элемент присутствовал при первоначальном запросе. Чтобы увидеть тот код, который браузер получает первоначально (тот самый код, который вы получите через requests, curl итд) - нужно нажать CTRL+U, либо правой кнопкой -> просмотр кода страницы
    Это - тот самый код, который вы получаете, и все данные нужно искать только в нем, это дает гарантию того, что нужный вам элемент будет присутствовать при выполнении запросов через ЯП.

    Если нужного элемента нет на странице, значит он загружен каким нибудь JS скриптом. Здесь будут два варианта:
    1. JS отправляет дополнительный запрос на сервер, получает нужные данные и вставляет их в HTML.
    2. Данные создаются внутри JS скрипта без запросов (очень маловероятно)

    Если данные появляются в результате дополнительного запроса, то нужно просто повторить этот запрос.

    Чтобы понять, что нужно - нужно воспользоваться любым сниффером трафика. Самое простое - встроенный в браузер логгер запросов. F12 -> Network.
    6124fec4cfd69347854863.png
    Обычно достаточно поставить фильтр на XHR.
    Если есть под рукой Fiddler, то тоже сгодится. Ну и Burp / ZAP как вариант (но очень жирно).

    Алгоритм будет примерно таким:
    1. Открываем вкладку Network
    2. Очищаем историю запросов (если есть)
    3. Желательно поставить галочку "Preserve log", чтобы история не пропадала.
    4. Обновляем страницу. Если контент подгружается при прокретке / по нажатию кнопки - крутим / нажимаем и тд.
    5. Теперь можно нажать CTRL+F все в той же вкладке Network и вписать искомый текст (допустим название товара).
    6. Слева будут те запросы, которые содержат эту подстроку. Теперь нужно просто пощелкать по ним, найти нужный, посмотреть из чего он состоит и повторить его через requests.

    Нужно обратить внимание на заголовки и тело запроса. Не редко при загрузке доп. информации в тело запроса так же передается указатель текущей страницы, или индекс элемента, с которого начинается новый список. Так же в заголовки могут добавиться дополнительные. Например, csrf token, либо X-Requested-With. Если повторение запроса не принесло желанный результат - стоит проверить заголовки и тело еще раз. Если сайт загружает данные при нажатии на кнопки, прокрутке страницы и тд - алгоритм тот же.

    Делюсь хорошим сайтом, который увидел тут: https://curl.trillworks.com/
    Копируете свой запрос как CURL
    612500b91076a776091384.png
    Затем вставляете на сайт. Он выдаст готовый код на Python. Но нужно понимать, что это автоматический процесс и он не всегда выдает правильный результат. В частности, преобразование application/json тела довольно неправильно. Но для копипаста некоторых заголовков подходит вполне. В общем сайтом пользоваться можно, но и самому думать тоже нужно

    Из хороших программ - Postman. Позволит легко и быстро составлять запросы, есть экспорт в Python код. Советую, если запросы довольно тяжелые, чтобы составлять их "наживую".

    Краткая выжимка:
    1. Код через инспектор браузера != коду с запроса requests / curl.
    2. Скорее всего нужные вам данные подгружаются доп. запросами, ищутся через любой мониторинг трафика.
    3. Следите за телом и заголовками запроса. Заголовки, даже самые незначительные, могут влиять на конечный результат.
    4. Старайтесь всегда в заголовки добавлять User-Agent

    Если данные грузятся без доп запросов, лежат в неизвестном формате, или просто лень разбираться - используйте Selenium. Он является таким же браузером, но только с возможностью контролировать его работу
    Ответ написан
    3 комментария
  • Как установить МонгоБд на хероку?

    ScriptKiddo
    @ScriptKiddo
    Возможно, установить pymongo, как и предлагают.

    To fix this error install pymongo with the srv extra...
    python -m pip install "pymongo[srv]"
    Ответ написан
    1 комментарий
  • Async def в библиотеке дискорд.Py?

    SoreMix
    @SoreMix
    yellow
    Это весь код? На команды должен вешаться декоратор @bot.command()
    Пример висит в разделе Bot Example https://github.com/Rapptz/discord.py
    Ответ написан
    7 комментариев
  • Как использовать endswith в условии?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Двоеточие пропущено. Новичку стоит почитать учебник, чтобы освоить базовый синтаксис хотя бы.
    Ответ написан
    Комментировать
  • Как брать новости на python?

    @MEDIOFF
    Python Developer
    Написать парсер новостей с медузы и назвать его news.py
    Ответ написан
    Комментировать
  • Как создать несколько команд?

    @UberPool
    Python/JS coder
    Используй декоратор client.command()
    Пример команды:
    @client.command()
    async def send_text(ctx):
         await ctx.send('test')
         #...more
    Ответ написан
    2 комментария
  • Как убрать конкретный текст из переменной на python?

    удочка тут
    рыбку ловите сами
    Ответ написан
    Комментировать
  • Как запустить код в интернете? то есть что бы код не был привязан к компьютеру?

    Арендовать сервер и запустить код на нём.
    Если совсем без привязки к железу, то можешь попробовать какой-нибудь serverless, типа Yandex Cloud Functions или AWS Lambda
    Ответ написан
    Комментировать
  • Возможно установить Debian без монитора?

    @Drno
    вставьте диск в другой ПК, поставьте дебиан+ssh. переставьте диск
    IP дебиан после загрузке можете посмотреть в dhcp своего роутера
    Ответ написан
    Комментировать
  • Как написать код так что бы после покупки личной роли/комнаты бот выдавал всё автоматически?

    x4zx
    @x4zx
    python developer
    Не важно новичок вы или профи, если возникла необходимость то требуется прочитать документацию, а также не маловажным является знание языка на котором пишите бота.

    Могу помочь лишь с частью кода:

    @client.command()
    async def addrole(ctx, *, member: discord.Member = None):
        guild = bot.get_guild(ctx.guild.id)
        role1 = guild.get_role(ID роли которую хотите выдавать)
        if member is None:
                await ctx.reply('Укажите пользователя, которому хотите выдать роль.')
            else:
                await member.add_roles(role1)
                await ctx.reply(f'Вы успешно выдали роль...')
    Ответ написан
    4 комментария
  • Как поменять название переменной на ходу?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Если вам такое надо, то вы делаете что-то очень сильно не так. Похоже, что вам нужно использовать список.
    Ответ написан
  • В чем ошибка sqlite telebot?

    Sergomen
    @Sergomen
    Просто делай добро и оно вернётся
    У тебя не объявлена переменная data
    Ответ написан
    Комментировать
  • В чем ошибка sqlite telebot?

    HemulGM
    @HemulGM Куратор тега Python
    Delphi Developer, сис. админ
    @bot.message_handler(commands=['start'])
    def start(message):
        if message.chat.id in data:
            bot.send_message(message.chat.id, 'Команды доступные')


    Откуда тут у тебя data? Неужели сложно понять ошибку? Там ведь "русским" языком написано.
    Ответ написан
    Комментировать
  • Синтактическая ошибка sqlite3?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Каждую неделю пишу, что не стоит формировать запросы конкатенацией, интерполяцией и форматированием строк. Используйте prepared statements и будет вам счастье.
    Ответ написан
    3 комментария
  • Ошибка sqlite3.OperationalError: no such column: cash, как решить?

    @o5a
    Значит в таблице нет такого поля cash.
    По всей видимости таблицу создавали изначально с другим составом полей, и она уже есть в базе (без cash), поэтому CREATE IF NOT EXISTS пропускается.

    Или удалите таблицу из базы, если данные не нужны: "DROP TABLE users"

    Или добавьте поле отдельно: "ALTER TABLE users ADD cash BIGINT".
    Ответ написан
    1 комментарий
  • (Питон, docx) Почему не получается заменить слово именно в таблице?

    @PNEroshevich
    Нужно обратить внимание на структуру файла, кроме параграфов в документе есть таблицы и колонтитулы.
    #Таблицы
    document.tables
    #Заголовки
    document.header
    #Подвалы
    document.footer


    Конечно же, таблицы имеет строки и ячейки
    Ответ написан
    Комментировать
  • Как узнать, онлайн ли человек в телеграм?

    axifive
    @axifive
    Software Engineer
    Пользователь в настройках конфиденциальности может выбрать параметры показа последней активности:
    • Все
    • Никто
    • Контакты

    А так же можно добавить конкретного пользователя в список исключений для показа/скрытия статуса.
    Соответсвенно поле "status" у каждого будет иметь разное поведение и узнать онлайн ли человек, можно только если он оставит настройки по умолчанию или сам захочет об этом поведать.
    Ответ написан
    Комментировать
  • Почему не работает команда pip install?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Это стандартная библиотека, ее не нужно устанавливать
    Ответ написан
    Комментировать