Парсер на bs4. Не могу достать span с класса а

140
18 декабря 2019, 04:40
from bs4 import BeautifulSoup
import requests

def get_html():
    r = requests.get('https://prom.ua/Sportivnye-sumki') #Менять ссылку тут
    return r.text

soup = BeautifulSoup(get_html() , 'html.parser')
content = soup.find('div', class_='x-catalog__content-line')
right_col = content.find('div', class_='x-catalog-gallery')
news_list = right_col.find_all('div', class_='x-gallery-tile js-gallery-tile js-productad')
last_try = content.find_all('div', class_='x-gallery-tile__content')
print(last_try)
art_list = [] #Лист со статьями
i=0
for article in last_try:
    name = article.find('a', class_='x-gallery-tile__name')['span itemprop']
    price = article.find('div', class_='x-gallery-tile__price')['data-qaprice']
    link = article.find('a', class_='x-gallery-tile__name')['href']
    art_list.append([link,price,name])
print(art_list)

А проблема собственно заключается вот в чем: все в коде работало до добавления строки с названием товара 'name'. После этого начал ловить ошибку

KeyError: 'span itemprop'

я вроде бы понимаю на что она указывает. Но как тогда достать название товара? запечатанное в 'span'? Это подкласс получается? или я что-то не так понимаю)

</div><a class="x-gallery-tile__name" data-qaid="product_name" href="https://my.prom.ua/remote/context_ads/click_ad_v2?token=v2%3AjWH6NHZy2pv_XPOaPBL0PUmqsDbS5hE3PtFj-ayNQh73LMUJgVk1S_1RjoldWqlSjZh4lxim9TMx9vkRKNZC&amp;campaign_id=643776&amp;product_id=724626250&amp;source=prom%3Acatalog&amp;variant=&amp;locale=ru&amp;prices_param=&amp;category_ids=380630" itemprop="url" rel="" target="_self"><span itemprop="name">Спортивная сумка Tiger</span></a></div>]

Мой первый вопрос на сервисе. Не нужно кидаться камнями) С радостью приму любую помощь ,будь то ссылка на обьяснение этих приколов или исправление строчки кода.

Answer 1

span это уже другой тег. Его также надо найти, как вы искали a и div'ы.

name = article.find('span', { 'itemprop' : 'name'}).text

Первая запись в art_list у меня получилась такая:

#['https://my.prom.ua/remote/context_ads/click_ad_v2?token=v2%3Aoy0MVCv7RAFLJSWUvHX9A76ChOns4-5xTjrUFqE_uVPBPFTxQ42EzTypMx0fcq5reeeYfFUw-La4A1D1VejS&campaign_id=281004&product_id=530423624&source=prom%3Acatalog&variant=&locale=ru&prices_param=&category_ids=380630', '245.00000', 'Спортивная сумка в стиле Nike черная экокожа']
READ ALSO
Bootstrap 4 + Isotope

Bootstrap 4 + Isotope

Использую isotope для создания masonry сетки + Bootstrap 4 (flex):

181
Как удалить сразу несколько объектов из DOM?

Как удалить сразу несколько объектов из DOM?

Подскажите, есть ли способ в JQuery удалить через remove() сразу несколько объектов с одним идентификаторам?

124
Jquery(Нубский вопрос)

Jquery(Нубский вопрос)

Функция работает некорректноПри нажатии на кнопку изменение происходит на миг и не фиксируется

148
Unity3D Автонаведение

Unity3D Автонаведение

как реализовать автонаведение? дабы объект смотрел в лицо игроку

158