BeautifulSoup4 - Парсинг по сайту

Пытаюсь через BeautifulSoup4 вытащить из этого кода id="730_2_23995050630" но никак не выходит. Пробовал так:

    soup = BeautifulSoup(response.text, "lxml")
    BFSearch = soup.find_all("div", {"class": "itemHolder"})
    print(BFSearch)

Но он находит только последнею строку на странице по данным фильтрам(Именно последнею строку мне не нужно) Так же пробовал так:

BFSearch = soup.find_all("div", class_ = "itemHolder")

Выдаёт тоже самое что и первый раз. Вот код странице, может кто поможет? (Я только учусь,1 день работаю с BS4)

    <div class="itemHolder">
      <div class="item app730 context2" id="730_2_23995050630" style="background-image: url(&quot;&quot;); background-color: rgb(126, 126, 126); border-color: rgb(176, 195, 217);" data-processed="true" data-realtime-price="0"><img src="https://community.cloudflare.steamstatic.com/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpopuP1FBRw7ODYYzxb08-3moS0n_L1JaKfxToF6pQo0riT9I-hiQzk_kNrZjymI4CXIVdtYVyF_QO3l-fuhMDvuYOJlyX0AsTPow/96fx96f">
        <a
          href="#730_2_23995050630" class="inventory_item_link"></a>
          <div class="swt_icon"></div>
          <div class="itemcount" data-classid="4646703570"></div>
          <div class="perItemDate not_tradable">7d</div>
          <div class="exteriorSTInfo">
            <span class="souvenirYellow"></span>
            <span class="stattrakOrange"></span>
            <span class="exteriorIndicator">BS</span>
          </div>
          <div class="stickerPrice"></div>
          <div class="priceIndicator">₽2.25</div>
          <div class="floatIndicator">0.6066</div>
          <div class="p-price"></div>
      </div>
    </div>

Ответы (1 шт):

Автор решения: gil9red

Как я понимаю вопрос получения id? Можно по разному искать

Я бы через css-селектор искал. Так мы найдем все теги с классом item, у которых есть атрибут id и у которых родительских тег имеет класс itemHolder:

items = soup.select(".itemHolder > .item[id]")

А чтобы получить id:

print([el['id'] for el in items])

UPD.

Предметы заполняются при выполнении javаscript кода на сайте, поэтому bs4 не смог и получить

Можно использовать selenium или его аналог с javаscript-движком, но можно и без них обойтись, но нужно будет поразбираться с кодом сайта на стороне клиента

Посмотрев на ajax-запросы сайта в инспекторе браузера на вкладке Сети увидел запрос: https://steamcommunity.com/inventory/76561198881890346/440/2?l=russian&count=75. Мои предположения, что:

  • 76561198881890346 - это профиль
  • 440 - id приложения
  • 2 - какой-то contextid, без понятия откуда это, возможно магическое число

По запросу в ответ приходит такой JSON:

{
    "assets": [
        {
            "appid": 440,
            "contextid": "2",
            "assetid": "9980235616",
            "classid": "331369",
            "instanceid": "3673300869",
            "amount": "1"
        },
        {
            "appid": 440,
            "contextid": "2",
            "assetid": "9980256674",
            "classid": "4724536",
            "instanceid": "11040580",
            "amount": "1"
        }
    ],
    "descriptions": [
        {
            "appid": 440,
            "classid": "331369",
            "instanceid": "3673300869",
            "currency": 0,
            "background_color": "3C352E",
            "icon_url": "fWFc82js0fmoRAP-qOIPu5THSWqfSmTELLqcUywGkijVjZULUrsm1j-9xgECaDgTXB_lvQdBmsfoF_ezBOESnN975sgC32I_xFV-MrvnMjNic1GUUKEND_Bu9l-4CHYz7sM7BY7j87gDfxKv6tWeoo5XMA",
            "icon_url_large": "fWFc82js0fmoRAP-qOIPu5THSWqfSmTELLqcUywGkijVjZULUrsm1j-9xgECaDgTXB_lvQdBmsfoF_ezBOESnN975sgC32I_xFV-MrvnMjNic1GUUKEND_Bu9l-4CHYz7sM7BY7j87gDfxKv6tWeoo5XMA",
            "descriptions": [
                {
                    "value": "Дата найма: Thursday, December 5, 2019 (21:34:56) по Гринвичу"
                },
                {
                    "value": "Хоть ты и опоздал на вечеринку, все равно именно ты был душой компании."
                },
                {
                    "value": " "
                },
                {
                    "value": "(Нельзя обменять или продать)"
                }
            ],
            "tradable": 0,
            "actions": [
                {
                    "link": "http://wiki.teamfortress.com/scripts/itemredirect.php?id=166&lang=ru_RU",
                    "name": "Статья в вики"
                },
                {
                    "link": "steam://rungame/440/76561202255233023/+tf_econ_item_preview%20S%owner_steamid%A%assetid%D11838274993395608916",
                    "name": "Осмотреть в игре"
                }
            ],
            "name": "Наёмник ",
            "name_color": "7D6D00",
            "type": "Значок 5-го уровня",
            "market_name": "Наёмник ",
            "market_hash_name": "Mercenary",
            "market_actions": [
                {
                    "link": "steam://rungame/440/76561202255233023/+tf_econ_item_preview%20M%listingid%A%assetid%D11838274993395608916",
                    "name": "Осмотреть в игре"
                }
            ],
            "commodity": 0,
            "market_tradable_restriction": 7,
            "market_marketable_restriction": 0,
            "marketable": 0,
            "tags": [
                {
                    "category": "Quality",
                    "internal_name": "Unique",
                    "localized_category_name": "Качество",
                    "localized_tag_name": "уникальный",
                    "color": "7D6D00"
                },
                {
                    "category": "Type",
                    "internal_name": "misc",
                    "localized_category_name": "Тип",
                    "localized_tag_name": "Аксессуар"
                },
                {
                    "category": "Class",
                    "internal_name": "Scout",
                    "localized_category_name": "Класс",
                    "localized_tag_name": "Scout"
                },
                {
                    "category": "Class",
                    "internal_name": "Sniper",
                    "localized_category_name": "Класс",
                    "localized_tag_name": "Sniper"
                },
                {
                    "category": "Class",
                    "internal_name": "Soldier",
                    "localized_category_name": "Класс",
                    "localized_tag_name": "Soldier"
                },
                {
                    "category": "Class",
                    "internal_name": "Demoman",
                    "localized_category_name": "Класс",
                    "localized_tag_name": "Demoman"
                },
                {
                    "category": "Class",
                    "internal_name": "Medic",
                    "localized_category_name": "Класс",
                    "localized_tag_name": "Medic"
                },
                {
                    "category": "Class",
                    "internal_name": "Heavy",
                    "localized_category_name": "Класс",
                    "localized_tag_name": "Heavy"
                },
                {
                    "category": "Class",
                    "internal_name": "Pyro",
                    "localized_category_name": "Класс",
                    "localized_tag_name": "Pyro"
                },
                {
                    "category": "Class",
                    "internal_name": "Spy",
                    "localized_category_name": "Класс",
                    "localized_tag_name": "Spy"
                },
                {
                    "category": "Class",
                    "internal_name": "Engineer",
                    "localized_category_name": "Класс",
                    "localized_tag_name": "Engineer"
                }
            ]
        },
        {
            "appid": 440,
            "classid": "4724536",
            "instanceid": "11040580",
            "currency": 0,
            "background_color": "3C352E",
            "icon_url": "fWFc82js0fmoRAP-qOIPu5THSWqfSmTELLqcUywGkijVjZULUrsm1j-9xgEKYAsuUBrstjtCmPfqDOCLDa5SmI1mtZMC2zRqwlIvbOHnZ2UwJFfGBfkGCvdop1DoWXdq68UzUYe3uasILr2NNqzy",
            "icon_url_large": "fWFc82js0fmoRAP-qOIPu5THSWqfSmTELLqcUywGkijVjZULUrsm1j-9xgEKYAsuUBrstjtCmPfqDOCLDa5SmI1mtZMC2zRqwlIvbOHnZ2UwJFfGBfkGCvdop1DoWXdq68UzUYe3uasILr2NNqzy",
            "descriptions": [
                {
                    "value": ""
                },
                {
                    "value": " "
                },
                {
                    "value": "(Нельзя обменять, продать или перековать)"
                }
            ],
            "tradable": 0,
            "actions": [
                {
                    "link": "http://wiki.teamfortress.com/scripts/itemredirect.php?id=261&lang=ru_RU",
                    "name": "Статья в вики"
                },
                {
                    "link": "steam://rungame/440/76561202255233023/+tf_econ_item_preview%20S%owner_steamid%A%assetid%D13892627020785158121",
                    "name": "Осмотреть в игре"
                }
            ],
            "name": "Кепка Манн Ко ",
            "name_color": "7D6D00",
            "type": "Головной убор 10-го уровня",
            "market_name": "Кепка Манн Ко ",
            "market_hash_name": "Mann Co. Cap",
            "market_actions": [
                {
                    "link": "steam://rungame/440/76561202255233023/+tf_econ_item_preview%20M%listingid%A%assetid%D13892627020785158121",
                    "name": "Осмотреть в игре"
                }
            ],
            "commodity": 0,
            "market_tradable_restriction": 7,
            "market_marketable_restriction": 0,
            "marketable": 0,
            "tags": [
                {
                    "category": "Quality",
                    "internal_name": "Unique",
                    "localized_category_name": "Качество",
                    "localized_tag_name": "уникальный",
                    "color": "7D6D00"
                },
                {
                    "category": "Type",
                    "internal_name": "misc",
                    "localized_category_name": "Тип",
                    "localized_tag_name": "Аксессуар"
                },
                {
                    "category": "Class",
                    "internal_name": "Scout",
                    "localized_category_name": "Класс",
                    "localized_tag_name": "Scout"
                },
                {
                    "category": "Class",
                    "internal_name": "Sniper",
                    "localized_category_name": "Класс",
                    "localized_tag_name": "Sniper"
                },
                {
                    "category": "Class",
                    "internal_name": "Soldier",
                    "localized_category_name": "Класс",
                    "localized_tag_name": "Soldier"
                },
                {
                    "category": "Class",
                    "internal_name": "Demoman",
                    "localized_category_name": "Класс",
                    "localized_tag_name": "Demoman"
                },
                {
                    "category": "Class",
                    "internal_name": "Medic",
                    "localized_category_name": "Класс",
                    "localized_tag_name": "Medic"
                },
                {
                    "category": "Class",
                    "internal_name": "Heavy",
                    "localized_category_name": "Класс",
                    "localized_tag_name": "Heavy"
                },
                {
                    "category": "Class",
                    "internal_name": "Pyro",
                    "localized_category_name": "Класс",
                    "localized_tag_name": "Pyro"
                },
                {
                    "category": "Class",
                    "internal_name": "Spy",
                    "localized_category_name": "Класс",
                    "localized_tag_name": "Spy"
                },
                {
                    "category": "Class",
                    "internal_name": "Engineer",
                    "localized_category_name": "Класс",
                    "localized_tag_name": "Engineer"
                }
            ]
        }
    ],
    "total_inventory_count": 2,
    "success": 1,
    "rwgrsn": -2
}

Тогда, чтобы получить вещи делаем такой код:

import requests


url = 'https://steamcommunity.com/inventory/76561198881890346/440/2?l=russian&count=75'

rs = requests.get(url)
data = rs.json()
assets = data['assets']

id_by_item = {
    item['instanceid']: item
    for item in data['descriptions']
}

for asset in assets:
    app_id = asset['appid']
    context_id = asset['contextid']
    asset_id = asset['assetid']
    instance_id = asset['instanceid']

    item_name = id_by_item[instance_id]['name'].strip()
    print(f'ID: {app_id}_{context_id}_{asset_id}. Name: {item_name}')

Результат:

ID: 440_2_9980235616. Name: Наёмник
ID: 440_2_9980256674. Name: Кепка Манн Ко
→ Ссылка