Ответы пользователя по тегу Beautiful Soup
  • Как спарсить подкатегории?

    Виктор Кокорич, здравствуйте!
    По числу похожих постов можно предположить, что Вы, как и остальные, где-то учитесь и решаете учебную задачу.
    Вот похожий пост.
    Спарсить подкатегории можно несколькими способами. Например, получить список страниц с категориями и обойти эти страницы парсером.
    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()?
    Ответ написан
    Комментировать
  • Как из класса вытащить 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"])
    Ответ написан
    Комментировать