@vasiliy763
IT engineer

Как получить данне с сайта с помощью BeautifulSoup?

Ниже указан код страницы который необходимо спарсить циклом из a в блоке div (Италия,белое, полусухое и т.д. ), для дальнейшей записи в CSV фал.

написал вот такой код :
product_data = soup.find(class_="catalog-grid catalog-grid_unpadding-mobile").find_all('div').find('article')
        for item in product_data:
            product_tds = item.find("div")
            title = product_tds[0].find("a").text
            title = product_tds[1].find("a").text
            title = product_tds[2].find("a").text
            title = product_tds[3].find("a").text
            title = product_tds[4].find("a").text
            title = product_tds[5].find("a").text
            title = product_tds[6].find("a").text
            title = product_tds[7].find("a").text


Но возникает ошибка что данные ненайдены ( title = product_tds[0].find("a").text
product_data = soup.find(class_="catalog-grid catalog-grid_unpadding-mobile").find_all('div').find('article')
AttributeError: 'NoneType' object has no attribute 'find_all'

Подскажите, где я ошибся ?

<div class="catalog-grid catalog-grid_unpadding-mobile catalog-grid_by3 rightside ">
                <div class="catalog-grid__item"><article class="product-snippet"itemscope itemprop="itemListElement" itemtype="http://schema.org/Product" >
    <button class="product-snippet__favorite product-card__favorite product-card__favorite"
            data-id="124852">

        <span>
<svg width="24" height="24">
    <use xlink:href="/static/local/assets/sprite.svg?v=4#heart"></use>
</svg>
</span>        <span class="product-card__favorite_bin">
<svg width="24" height="24">
    <use xlink:href="/static/local/assets/sprite.svg?v=4#bin"></use>
</svg>
</span>    </button>

    <!-- TOP PART -->
    <div class="product-snippet__top">

        <div class="product-snippet__right">
            <meta itemprop="sku" content="124852">                            <span itemprop="brand" itemscope itemtype="http://schema.org/Brand">
                    <meta itemprop="name" content="Colterenzio">                </span>
            
            <!-- ID -->
            <div class="product-snippet__id" data-value-group-id="132655"
                 data-value-id="108038">
                <span>Артикул:</span>
                124852            </div>
            <!-- #ID -->
            <!-- RATINGS -->
        <div class="product-snippet__ratings">
        <!-- STARS -->
                    <div class="product-snippet__ratings-item">
                
<svg width="12" height="12">
    <use xlink:href="/static/local/assets/sprite.svg?v=4#star"></use>
</svg>
                <span>4.8</span>
            </div>
                    
        
                <!-- #STARS -->

        <!-- GREEN SELECTIONS -->
                <!-- #GREEN SELECTIONS -->

        
            </div>
<!-- #RATINGS -->

            <!-- NAME -->
            <a href="/catalog/product/colterenzio_pfefferer_2020_075/"
               data-page="1"
               data-value-group-id="132655"
               data-value-id="108038"
               class="product-snippet__name js-dy-slot-click">
                Вино Pfefferer, Colterenzio, 2020&nbsp;г.            </a>
            <meta itemprop="name" content="Вино Pfefferer, Colterenzio, 2020&nbsp;г.">            <!-- #NAME -->
                            <!-- DESC -->
                <div class="product-snippet__desc">
                    <a href="/catalog/vino/filter/country-italiya/">Италия</a>, <a href="/catalog/vino/filter/color-beloe/">белое</a>, <a href="/catalog/vino/filter/sugar_type-polusukhoe/">полусухое</a>, <a href="/catalog/vino/filter/volume-0_75/">0.75&nbsp;л.</a>                </div>
                <!-- #DESC -->
                        <!-- DETAIL -->
            <div class="product-snippet__detail">

                
                                    <div class="tag-stock product-snippet__stock-part">
                        <div class="tag-stock__buy-price-sale-link">
                            <div class="tag-stock__icon-wrap">
                                <span class="tag-stock__buy-price-sale-icon">
<svg width="19" height="19">
    <use xlink:href="/static/local/assets/sprite.svg?v=4#sale"></use>
</svg>
</span>                                <div class="tag-stock__alert">
                                                                        <div class="tag-stock__alert-title">Вы обратились по адресу: у нас такого много</div>
                                    <p class="tag-stock__alert-descr">
                                                                            </p>
                                                                            <div class="tag-stock__alert-link-wrap">
                                            <a class="tag-stock__alert-link" href="/stock/vy-obratilis-po-adresu-u-nas-takogo-mnogo/"
                                                >
                                                Подробнее</a>
                                        </div>
                                                                    </div>
                            </div>
                            <span class="tag-stock__buy-price-sale-text">Участвует в акции</span>
                        </div>
                    </div>
                
                
                                    <!-- INFO -->
                    <div class="product-snippet__info">
                                                    <div class="product-snippet__info-item">
                                <span class="product-snippet__info-title">Страна:</span>

                                                                                                    <a href="/catalog/vino/filter/country-italiya/">Италия</a>
                                                            </div>
                                                    <div class="product-snippet__info-item">
                                <span class="product-snippet__info-title">Цвет:</span>

                                                                                                    <a href="/catalog/vino/filter/color-beloe/">белое</a>
                                                            </div>
                                                    <div class="product-snippet__info-item">
                                <span class="product-snippet__info-title">Сахар:</span>

                                                                                                    <a href="/catalog/vino/filter/sugar_type-polusukhoe/">полусухое</a>
                                                            </div>
                                                    <div class="product-snippet__info-item">
                                <span class="product-snippet__info-title">Объем:</span>

                                                                                                    <a href="/catalog/vino/filter/volume-0_75/">0.75&nbsp;л.</a>
                                                            </div>
                                                    <div class="product-snippet__info-item">
                                <span class="product-snippet__info-title">Виноград:</span>

                                                                <a href="/catalog/vino/filter/grape-muskat_zheltyy/">мускат желтый 100%</a>                                                            </div>
                                                    <div class="product-snippet__info-item">
                                <span class="product-snippet__info-title">Производитель:</span>

                                                                                                    <a href="/catalog/vino/filter/manufacturer-colterenzio/">Colterenzio</a>
                                                            </div>
                                                    <div class="product-snippet__info-item">
                                <span class="product-snippet__info-title">Регион:</span>

                                                                                                    <a href="/catalog/vino/filter/region-trentino_alto_adidzhe/">Трентино-Альто Адидже</a>
                                                            </div>
                                                    <div class="product-snippet__info-item">
                                <span class="product-snippet__info-title">Стилистика:</span>

                                                                                                    белое - яркое, из ароматических сортов винограда                                                            </div>
                                            </div>
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Ответ


data = '''
<div class="catalog-grid catalog-grid_unpadding-mobile catalog-grid_by3 rightside ">
                <div class="catalog-grid__item"><article class="product-snippet"itemscope itemprop="itemListElement" itemtype="http://schema.org/Product" >
    <button class="product-snippet__favorite product-card__favorite product-card__favorite"
            data-id="124852">

        <span>
<svg width="24" height="24">
    <use xlink:href="/static/local/assets/sprite.svg?v=4#heart"></use>
</svg>
</span>        <span class="product-card__favorite_bin">
<svg width="24" height="24">
    <use xlink:href="/static/local/assets/sprite.svg?v=4#bin"></use>
</svg>
</span>    </button>

    <!-- TOP PART -->
    <div class="product-snippet__top">

        <div class="product-snippet__right">
            <meta itemprop="sku" content="124852">                            <span itemprop="brand" itemscope itemtype="http://schema.org/Brand">
                    <meta itemprop="name" content="Colterenzio">                </span>

            <!-- ID -->
            <div class="product-snippet__id" data-value-group-id="132655"
                 data-value-id="108038">
                <span>Артикул:</span>
                124852            </div>
            <!-- #ID -->
            <!-- RATINGS -->
        <div class="product-snippet__ratings">
        <!-- STARS -->
                    <div class="product-snippet__ratings-item">

<svg width="12" height="12">
    <use xlink:href="/static/local/assets/sprite.svg?v=4#star"></use>
</svg>
                <span>4.8</span>
            </div>


                <!-- #STARS -->

        <!-- GREEN SELECTIONS -->
                <!-- #GREEN SELECTIONS -->


            </div>
<!-- #RATINGS -->

            <!-- NAME -->
            <a href="/catalog/product/colterenzio_pfefferer_2020_075/"
               data-page="1"
               data-value-group-id="132655"
               data-value-id="108038"
               class="product-snippet__name js-dy-slot-click">
                Вино Pfefferer, Colterenzio, 2020&nbsp;г.            </a>
            <meta itemprop="name" content="Вино Pfefferer, Colterenzio, 2020&nbsp;г.">            <!-- #NAME -->
                            <!-- DESC -->
                <div class="product-snippet__desc">
                    <a href="/catalog/vino/filter/country-italiya/">Италия</a>, <a href="/catalog/vino/filter/color-beloe/">белое</a>, <a href="/catalog/vino/filter/sugar_type-polusukhoe/">полусухое</a>, <a href="/catalog/vino/filter/volume-0_75/">0.75&nbsp;л.</a>                </div>
                <!-- #DESC -->
                        <!-- DETAIL -->
            <div class="product-snippet__detail">


                                    <div class="tag-stock product-snippet__stock-part">
                        <div class="tag-stock__buy-price-sale-link">
                            <div class="tag-stock__icon-wrap">
                                <span class="tag-stock__buy-price-sale-icon">
<svg width="19" height="19">
    <use xlink:href="/static/local/assets/sprite.svg?v=4#sale"></use>
</svg>
</span>                                <div class="tag-stock__alert">
                                                                        <div class="tag-stock__alert-title">Вы обратились по адресу: у нас такого много</div>
                                    <p class="tag-stock__alert-descr">
                                                                            </p>
                                                                            <div class="tag-stock__alert-link-wrap">
                                            <a class="tag-stock__alert-link" href="/stock/vy-obratilis-po-adresu-u-nas-takogo-mnogo/"
                                                >
                                                Подробнее</a>
                                        </div>
                                                                    </div>
                            </div>
                            <span class="tag-stock__buy-price-sale-text">Участвует в акции</span>
                        </div>
                    </div>


                                    <!-- INFO -->
                    <div class="product-snippet__info">
                                                    <div class="product-snippet__info-item">
                                <span class="product-snippet__info-title">Страна:</span>

                                                                                                    <a href="/catalog/vino/filter/country-italiya/">Италия</a>
                                                            </div>
                                                    <div class="product-snippet__info-item">
                                <span class="product-snippet__info-title">Цвет:</span>

                                                                                                    <a href="/catalog/vino/filter/color-beloe/">белое</a>
                                                            </div>
                                                    <div class="product-snippet__info-item">
                                <span class="product-snippet__info-title">Сахар:</span>

                                                                                                    <a href="/catalog/vino/filter/sugar_type-polusukhoe/">полусухое</a>
                                                            </div>
                                                    <div class="product-snippet__info-item">
                                <span class="product-snippet__info-title">Объем:</span>

                                                                                                    <a href="/catalog/vino/filter/volume-0_75/">0.75&nbsp;л.</a>
                                                            </div>
                                                    <div class="product-snippet__info-item">
                                <span class="product-snippet__info-title">Виноград:</span>

                                                                <a href="/catalog/vino/filter/grape-muskat_zheltyy/">мускат желтый 100%</a>                                                            </div>
                                                    <div class="product-snippet__info-item">
                                <span class="product-snippet__info-title">Производитель:</span>

                                                                                                    <a href="/catalog/vino/filter/manufacturer-colterenzio/">Colterenzio</a>
                                                            </div>
                                                    <div class="product-snippet__info-item">
                                <span class="product-snippet__info-title">Регион:</span>

                                                                                                    <a href="/catalog/vino/filter/region-trentino_alto_adidzhe/">Трентино-Альто Адидже</a>
                                                            </div>
                                                    <div class="product-snippet__info-item">
                                <span class="product-snippet__info-title">Стилистика:</span>

                                                                                                    белое - яркое, из ароматических сортов винограда                                                            </div>
                                            </div>

'''
from bs4 import BeautifulSoup

soup = BeautifulSoup(data, 'html5lib')
product_data = soup.find(class_="product-snippet__info") #  выбрал этот класс, так как именно в нём отображена модель объекта - это видно глазами. 
#  там внутри однотипные элементы, и их будем далее перебирать. 

title = []
for number, item in enumerate(product_data): #  тут enumerate не обязательно, я его поместил, чтобы когда буду разбираться, смотреть, к какому полю из полей product_data по номеру обращается скрипт. Можно убрать number и enumerate. 
    product_tds = item.find("a") #  нахожу следующий тег <a>
    if hasattr(product_tds, 'text'): #  среди найденных объектов у некоторых есть атрибут «text», у других его нет. Где его нет - пропускаем, где есть - складываем в список
        title.append(product_tds.text)
print(' '.join(title)) #  печатаем найденные и сложенные в список title тексты через пробел.


В действительности надо смотреть код всей страницы и, возможно, перебирать более сложным способом - но опереться на мою заготовочку можно, наверно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы