AttributeError: 'NoneType' object has no attribute 'get_text'

Novichok

Новичок
Пользователь
Янв 4, 2021
19
1
3
Здравствуйте начал работать с API по видео но оно резко оборвалось и я так и не смог закончить программу. Метод get_text() отвечает за отделение от структуры взятой для анализа, текста. Он выдает ошибку, потому что не видит текста в блоке, но он там есть. Надо чтобы программа выводила цену. Помогите пожалуйста!

Python:
import requests
from bs4 import BeautifulSoup

URL = 'https://steamcommunity.com/market/listings/730/Berlin%202019%20Legends%20Autograph%20Capsule'
HEADERS = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0', 'accept': '*/*'}


def get_html(url, params=None):
    r = requests.get(url, headers=HEADERS, params=params)
    return r


def get_content(html):
    soup = BeautifulSoup(html, 'html.parser')
    items = soup.find_all(class_="market_commodity_order_summary", id="market_commodity_forsale")
    cars = []
    for item in items:
            cars.append({
                'link': item.find('span', class_='market_commodity_orders_header_promote').get_text()})
    print(cars)

def parse():
    html = get_html(URL)
    if html.status_code == 200:
        get_content(html.text)
    else:
        print('Error')


parse()
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
933
208
43
20
Москва
Может мой вопрос вам покажется тупым, то-есть ошибка здесь?
cars.append({
'link': item.find('span', class_='market_commodity_orders_header_promote').Item.text()})
Но почему если здесь в html:
<span class="market_commodity_orders_header_promote">$1.38</span>
Такое бывает когда контент генирится на сайте с помощью java script, и тогда его нельзя спарсить с помощью requests

Можно пробовать или через selenium (но тогда будет открываться браузер, по этому это дольше) или через requsts-HTML
(работает быстрее, но не всегда срабатывает)

 
Последнее редактирование:

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
933
208
43
20
Москва
У вас просто не находится в html коде тег span с указанным классом,

кстати, можно использовать не Item.get_text а просто Item.text
 

Novichok

Новичок
Пользователь
Янв 4, 2021
19
1
3
У вас просто не находится в html коде тег span с указанным классом,

кстати, можно использовать не Item.get_text а просто Item.text
Может мой вопрос вам покажется тупым, то-есть ошибка здесь?
cars.append({
'link': item.find('span', class_='market_commodity_orders_header_promote').Item.text()})
Но почему если здесь в html:
<span class="market_commodity_orders_header_promote">$1.38</span>
 

Novichok

Новичок
Пользователь
Янв 4, 2021
19
1
3
Такое бывает когда контент генирится на сайте с помощью java script, и тогда его нельзя спарсить с помощью requests

Можно пробовать или через selenium (но тогда будет открываться браузер, по этому это дольше) или через requsts-HTML
(работает быстрее, но не всегда срабатывает)

Я понял, спасибо огромное!!!
 
  • Мне нравится
Реакции: Vershitel_sudeb

Форум IT Специалистов