Объект Python.NoneType не имеет атрибута «b» - PullRequest
0 голосов
/ 16 мая 2019

Я получаю сообщение об ошибке, когда хочу получить код купона с использованием Beautifulsoap

Это часть страницы:

 <ul class="nc-nav__promo-modal--global-links"><div class="nc-nav__promo-modal--global-divider"></div>
<li><a href="/pk/c/womens_sale_events/35OffWearNowStyles?intcmp=seealloffersnav_1_spanstylefontweight500top035offourfavoritewearnowstylesonlineonlyusecodebstylefontweight700top0hisummerbspan"><div><span style="font-weight: 500; top: 0">35% off our favorite wear-now styles.* Online only. Use code <b style="font-weight: 700; top: 0">HISUMMER.</b></span></div></a><button type="button" class="nc-nav__promo-modal--global-details-button" aria-describedby="dialogDetailsBtn-0">Details</button></li>
<li><a href="/pk/c/womens_sale_events/35OffWearNowStyles?intcmp=seealloffersnav_1_spanstylefontweight500top035offourfavoritewearnowstylesonlineonlyusecodebstylefontweight700top0hisummerbspan"><div><span style="font-weight: 500; top: 0">35% off our favorite wear-now styles.* Online only. Use code <b style="font-weight: 700; top: 0">MAY20.</b></span></div></a><button type="button" class="nc-nav__promo-modal--global-details-button" aria-describedby="dialogDetailsBtn-0">Details</button></li>
</ul>

Это мой код:

def parse(self, response):

    self.mongo.GetAllDocuments()
    soup = BeautifulSoup(response.text, 'html.parser')
    url,off,coupon,itemtype = "","","",""
    containersC=soup.select(".nc-nav__promo-modal--global-links > li")
    for itemC in containersC:
        coupon = itemC.a.div.span.b.text

Я получаю следующую ошибку: AttributeError: 'NoneType' object has no attribute 'b'

1 Ответ

1 голос
/ 16 мая 2019

Ваш код предполагает, что структура HTML одинакова для всех экземпляров. Если b (или любой другой элемент) отсутствует, вы получите эту ошибку. Один из подходов заключается в том, чтобы сначала проверить наличие тега b, прежде чем пытаться его напечатать, например:

from bs4 import BeautifulSoup

html = """ <ul class="nc-nav__promo-modal--global-links"><div class="nc-nav__promo-modal--global-divider"></div>
<li><a href="/pk/c/womens_sale_events/35OffWearNowStyles?intcmp=seealloffersnav_1_spanstylefontweight500top035offourfavoritewearnowstylesonlineonlyusecodebstylefontweight700top0hisummerbspan"><div><span style="font-weight: 500; top: 0">35% off our favorite wear-now styles.* Online only. Use code <b style="font-weight: 700; top: 0">HISUMMER.</b></span></div></a><button type="button" class="nc-nav__promo-modal--global-details-button" aria-describedby="dialogDetailsBtn-0">Details</button></li>
<li><a href="/pk/c/womens_sale_events/35OffWearNowStyles?intcmp=seealloffersnav_1_spanstylefontweight500top035offourfavoritewearnowstylesonlineonlyusecodebstylefontweight700top0hisummerbspan"><div><span style="font-weight: 500; top: 0">35% off our favorite wear-now styles.* Online only. Use code <b style="font-weight: 700; top: 0">MAY20.</b></span></div></a><button type="button" class="nc-nav__promo-modal--global-details-button" aria-describedby="dialogDetailsBtn-0">Details</button></li>
</ul>"""

soup = BeautifulSoup(html, 'html.parser')

for li_tag in soup.select(".nc-nav__promo-modal--global-links > li"):
    b_tag = li_tag.find('b')

    if b_tag:
        print(b_tag.text)

Для вашего HTML это дает:

HISUMMER.
MAY20.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...