• Как спарсить содержимое скрипта с помощью python?

    from bs4 import BeautifulSoup
    import json
    
    html = "<script nonce="GxP4ZZHL0G9c7ogwBCw4pwaT">
        // Здесь находится json 
    </script>"
    
    soup = BeautifulSoup(hmtl, parser="lxml")
    raw = soup.find("script").get_text().strip()
    
    data = json.loads(raw)


    Но можно и без bs4)))
    Ответ написан
    Комментировать
  • Как запустить цикл в 10 потоков?

    Доброго)
    Посмотрите этот код, вдруг он Вам поможет.
    import threading
    #pip install requests
    import requests
    
    
    def get_status(url, results):
        results[url] = requests.get(url).status_code
    
    
    sites = ['https://www.google.com/', 'https://www.youtube.com/',
             'https://pastebin.com/', 'https://ru.wikipedia.org/',
             'https://yandex.ru/', 'https://www.pornhub.com/',
             'https://vk.com/', 'https://www.reddit.com/',
             'https://qna.habr.com/', 'https://stackoverflow.com/']*5
    
    
    results = {}
    workers = [threading.Thread(target=get_status(sites[f], results)) for f in range(10)]
    
    for worker in workers:
        worker.start()
    
    for worker in workers:
        worker.join()
    
    for k, v in results.items():
        print(k, v)
    Ответ написан
    Комментировать
  • PIP ошибка python 3.8, как решить?

    DTPlayer добрый день!
    А Вы пробовали читать README.md?
    Раздел Installation?

    pip install pyinstaller
    Ответ написан
    Комментировать
  • Существует ли встроенная функция, которая принимает массив и целое число n и реплицирует каждый элемент массива n раз?

    Виктор Хаврин Добрый день!
    Можно так:
    m = 3
    
    simple_list = [1, 2, 3, 4]
    res = []
    
    for i in simple_list:
        res += [i for _ in range(m)]
    
    print(res)
    # [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]


    Или так:
    n = 4
    
    some_list = [6, 7, 8, 9]
    replica = []
    
    for i in some_list:
        replica.append([i for _ in range(n)])
    
    print(replica)
    # [[6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8], [9, 9, 9, 9]]
    Ответ написан
    Комментировать
  • Как метод актуальнее?

    Никита Ягнятинский, добрый день!
    Вот что пишет Дэн Бейдер в свой книге "Чистый Python":
    Если форматирующие строки поступают от пользователей, то используйте шаблонные строки, чтобы избежать проблем с безопасностью. В противном случае используйте интерполяцию литеральных строк при условии, что вы работаете с Python 3.6+, и «современное» форматирование строк — если нет.

    Более подробно форматирование строк изложено в самой книге, буквально 8 страниц. Книга доступна в сети.
    Ответ написан
    Комментировать
  • Почему html.Parser выдаёт ошибку?

    Yaroslav Rsx, добрый день!
    Вы немного усложнили способ получения активных пользователей ветки этого сайта.
    Страницы форума доступны любому, в том числе незарегистрированному, пользователю.
    Нет смысла логиниться.
    Посмотрите мой код, запустите.

    import requests
    from bs4 import BeautifulSoup
    from pprint import pprint
    
    
    # %%time
    
    list_nicknames = []
    
    url = r"https://forum.excalibur-craft.ru/forum/14-флудилка/?page="
    
    for i in range(1,228):
        r = requests.get(url+str(i))
        soup = BeautifulSoup(r.content)
    
        all_rows = soup.find_all("div", {"class": "ipsDataItem_meta"})
        for el in all_rows:
            if el.find("a") is not -1 and el.find("a") is not None:
                nickname = el.find("a").get_text()
                list_nicknames.append(nickname)
    
    uniq_nicknames = set(list_nicknames)
    print(len(list_nicknames)) # 5671 пользователя
    print(len(uniq_nicknames)) # 2126 уникальных
    # pprint(uniq_nicknames)


    Успехов в парсинге)

    UPD:
    Код выше тестировался в Google.Colab - ошибок не было.
    Интерпретатор в связке с PyCharm или SiblimeText возвращает ошибку.

    В этом случае стоит попробовать так:
    import requests
    from bs4 import BeautifulSoup
    from pprint import pprint
    
    
    list_nicknames = []
    
    url = r"https://forum.excalibur-craft.ru/forum/14-флудилка/?page="
    
    for i in range(1,228):
        r = requests.get(url+str(i))
        soup = BeautifulSoup(r.content, "html.parser")
    
        all_rows = soup.find_all("div", {"class": "ipsDataItem_meta"})
        for el in all_rows:
            if el.find("a") != -1 and el.find("a") is not None:
                nickname = el.find("a").get_text()
                list_nicknames.append(nickname)
    
    uniq_nicknames = set(list_nicknames)
    print(len(list_nicknames)) # 5671 пользователя
    print(len(uniq_nicknames)) # 2126 уникальных
    # pprint(uniq_nicknames)
    Ответ написан
    Комментировать
  • Как спарсить подкатегории?

    Виктор Кокорич, здравствуйте!
    По числу похожих постов можно предположить, что Вы, как и остальные, где-то учитесь и решаете учебную задачу.
    Вот похожий пост.
    Спарсить подкатегории можно несколькими способами. Например, получить список страниц с категориями и обойти эти страницы парсером.
    import requests
    from bs4 import BeautifulSoup
    from pprint import pprint
    
    
    url = 'http://www.zagrya.ru/'
    headers = {
           'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9/',
           'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36',
        }
    
    html = requests.get(url, headers=headers)
    soup = BeautifulSoup(html.content)
    
    
    # словарь, в который записываются НАЗВАНИЯ всех категорий на сайте и ССЫЛКИ на них
    categories = {}
    
    for cat in soup.find_all('a', {"class": "hor-menu__lnk"}):
        name = cat.find("span", {"class":"hor-menu__text"}).get_text()
        url = "http://www.zagrya.ru" + cat.attrs['href']
        
        categories[name] = url
    
    print(categories)
    # {
    # 'НОВИНКИ': 'http://www.zagrya.ru/category/category_2578/', 
    # 'КНИГИ': 'http://www.zagrya.ru/category/knigi/', 
    # 'ИГРУШКИ': 'http://www.zagrya.ru/category/igrushki/', 
    # 'КАНЦТОВАРЫ': 'http://www.zagrya.ru/category/category_2639/', 
    # 'УЧЕБНАЯ ЛИТЕРАТУРА': 'http://www.zagrya.ru/category/uchyebnaya-lityeratura/', 
    # 'ЭНЦИКЛОПЕДИИ': 'http://www.zagrya.ru/category/entsiklopyedii/', 
    # 'РАСПРОДАЖА': 'http://www.zagrya.ru/category/rasprodazha_1/'
    # }
    
    
    # словарь, в который записываются НАЗВАНИЯ всех категорий и их ПОДКАТЕГОРИИ
    subcategories = {}
    
    for k, v in categories.items():
        # перебираем все ссылки/переходим по ним
        html = requests.get(v, headers=headers)
        soup = BeautifulSoup(html.content)
    
        sub_list = []
        for subcat in soup.find_all("div", {"class": "subcat-wrapper__item sub-cat-nobd"}):
            sub_list.append(subcat.find("div", {"class": "sub-cat__title"}).get_text())
        subcategories[k] = sub_list
    
    
    # вывод на экран
    for k,v in subcategories.items():
        print(k)
        pprint(v)
    
    # Грошь - цена Вам, как специалисту, если Вы самостоятельно не разберётесь
    # с тэгами и работай библиотек Requests и BeautifulSoup
    Ответ написан
    1 комментарий
  • Парсер выдает none?

    Gorin43, здравствуйте!
    У Вас много ошибок в коде:
    import requests
    from bs4 import BeautifulSoup
    
    
    url = 'http://www.zagrya.ru/'
    headers = {
           'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9/',
           'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36',
        }
    
    
    def get_html(url):
        r = requests.get(url, headers=headers)
        return r
    
    
    def get_content(html):
        soup = BeautifulSoup(html.content)
        items = soup.find_all('li', {"class": "hor-menu__item has-subm"})
        tovari = []
        category = {}
    
        for item in items:
            tovari.append(item.find('a', {'class':'hor-menu__lnk'}).find('span', {'class':'hor-menu__text'}).get_text())
        
        category['karegorii'] = tovari
        return category
    
    html = get_html(URL)
    print(get_content(html))
    Ответ написан
    Комментировать
  • Почему вместо выгрузки данных выдает пустой список?

    Виктор Кокорич доброго времени суток!
    возможно проблема в этой строке:

    otzivi.extend(get_content(html.text))

    - в функции get_content()
    - может правильно так html.get_text()?
    Ответ написан
    Комментировать
  • Как попасть на интервью или как найти работу Python junior/intern разработчиком?

    Данил Шевчук, добрый день!
    Всё будет, главное не бросать. Продолжать учиться и писать код.
    5f99726dc2911218135915.jpeg
    То, что уже сделано, пройдено - это тоже важно. Вы молодец! Желаю Вам успеха в поиске работы.
    Ответ написан
    Комментировать
  • Как минимально поделить число на 2 и 3 столько раз сколько будет нужно?

    21ken, добрый день!
    Есть хорошая книга "Грокаем алгоритмы", в неё рассматривается похожая задача про Рюкзак.
    Ответ написан
    Комментировать
  • Как починить anaconda?

    Jek добрый день!
    Есть иной способ, кроме использования Анаконды, - Google Colab. Нужна только гугловская учётка (почта на gmail).
    Чтобы создать новый ноутбук нужно открыть Google.Диск, нажать "+" и выбрать Google Colaboratory.
    5f8ed283c780e684430716.png
    5f8ed2939db6c804034557.png
    Пару фишек:
    !pip list # поcсмотреть список всех установленных библиотек
    !pip install zeep # установить библиотеку zeep
    Ответ написан
    Комментировать
  • Как сделать конкатенацию слов из списка?

    yternoxs
    g = ['a','b','c','d']
    
    a = ""
    
    for i in range(len(g)):
        if i == 2:
            a = a + ":" + g[i]
        else:
            a = a + g[i]
    
    print(a)
    Ответ написан
    Комментировать
  • Не выводится текст в консоль, что делать?

    Николай Гетманов
    1. можно создать общий класс и наследоваться от него
    2. написать внутри класса несколько функций (атака, защита и т.д.)
    3. используя random генерировать случайные числа для атаки и нанесения урона
    4. запустить цикл while и через генерацию случайных чисел сделать битву (на каждой итерации вычитая здоровье и увеличивая силу)

    class Hero:  # Класс "персонаж"
    
        def __init__(self, dmg):
            self.strength = 10
            self.health = 300
            self.damage = dmg * self.strength
    
        def attacked(self):
            self.damage += 1
    
        def show(self):
            print(f"strength: \t {self.strength}")
            print(f"health: \t {self.health}")
            print(f"damage: \t {self.damage}")
    
    
    bolg = Hero(dmg=1000) # создаём орка
    aragorn = Hero(dmg=800) # создаём рыцаря
    
    # выводим на экран характеристики героев:
    bolg.show()
    print()
    aragorn.show()
    
    # начинаем битву
    bolg.attacked()
    aragorn.attacked()
    
    # снова выводим на экран характеристики героев:
    bolg.show()
    print()
    aragorn.show()
    
    # и так далее...
    Ответ написан
    Комментировать
  • Как из класса вытащить href?

    Руслан
    from bs4 import BeautifulSoup
    
    html = '<a class="bttn_green" href="/index.php?r=quests/reward&amp;id=74538347&amp;quest_id=1598044167">text</a> \
        <a class="bttn_green" href="/index.php?r=quests/reward&amp;id=74498540&amp;quest_id=1597875696">text</a> \
        <a class="bttn_green" href="/index.php?r=quests/reward&amp;id=74205167&amp;quest_id=1596578514">text</a> \
        <a class="bttn_green" href="/index.php?r=quests/reward&amp;id=74479806&amp;quest_id=1597790754">text</a> \
        <a class="bttn_green" href="/index.php?r=quests/reward&amp;id=74327918&amp;quest_id=1597093800">text</a>'
    
    
    soup = BeautifulSoup(html)
    
    links = soup.findAll("a", {"class": "bttn_green"})
    
    for link in links:
        # print(link.get_text())
        print(link.attrs["href"])
    Ответ написан
    Комментировать
  • Как исправить ошибку?

    5f7ff51ad6bed517031815.png
    Ответ написан
    Комментировать
  • List index out of range почему?

    siganiga, также есть большая вероятность, что в какой-то из строк отсутствует code.
    Внутри цикла можно добавить проверку на число разделителей:
    for account in file:
        if account.count(":") == 3:
            username = account.split(":")[0]
            passwords = account.split(":")[1]
            code = account.split(":")[2]
        else:
            print("code is absent")
            username = account.split(":")[0]
            passwords = account.split(":")[1]
    Ответ написан
    Комментировать
  • Стоит ли продолжать учить Python для первой работы в СПБ?

    mkone112, с такой матбазой я бы ОДНОЗНАЧНО попробовал окунуться в мир Data Science, Data Analysis, Data Engineering. Сейчас это тренд, да и вообще пытливому уму всегда интересно работать с данными, формировать гипотезы, анализировать стат. результаты. В Яндекс.Практикум есть бесплатный вводный курс по Анализу данных (это не реклама, сам проходил его).
    Научиться создавать сайты и освоить веб-разработку Вы сможете всегда.

    Начинающий всегда стоит на неком перепутье: перед ним всегда несколько дорог и стоит вопрос выбора. Пока не попробуете несколько направлений, не поймёте, что Ваше, а что нет. Нужно пробовать.
    Ответ написан
    1 комментарий
  • Как вывести текст при парсинге?

    hoogierain
    # если такой класс встречается в html-коде только ОДИН раз, то код такой:
    soup = BeautifulSoup(resp, 'html.parser')
    appeals = soup.find('span', {'class': 'tlid-translation translation'}).get_text().strip()
    bot.send_message(message.chat.id, appeals)
    
    # если НЕСКОЛЬКО раз, то код такой:
    soup = BeautifulSoup(resp, 'html.parser')
    appeals = [s.get_text().strip() for s in soup.find_all('span', {'class': 'tlid-translation translation'})]
    for app in appeals:
    	bot.send_message(message.chat.id, app)
    Ответ написан
    Комментировать
  • Error: User must grant an access to permission 'VALUABLE_ACCESS?

    Le-han, во-первых пользователя с таким id нет в одноклассниках.
    Попробуйте выполнить свой код, добавив любой id c существующим пользователем.
    Например, с таким - 456544469248
    Ответ написан
    Комментировать