Красивая Суповая фильтрация по ключевым словам / атрибутам (питон) - PullRequest
0 голосов
/ 19 марта 2019

Я хочу очистить данные веб-сайта с помощью Beautiful Soup и запросов, и я почти получил то, что хочу, но не могу найти способ отфильтровать последние шаги:

Вотмой код:

variants = soup.find('div', class_='product-configure')
print(variants)

Это печатает следующее:

<div class="product-configure">
<select id="custom-variants">
<option disabled="disabled" selected="selected">Maak een keuze</option>
<option data-status="available" data-value="177379037">Size : EU 40.5 (US 7) 
</option>
<option data-status="available" data-value="177379043">Size : EU 41.5 (US 8) 
</option>
<option data-status="available" data-value="177379223">Size : EU 42.5 (US 9) 
</option>
</select>
</div>

Как я могу отфильтровать это, чтобы он печатал только все числа в «data-value»?(например, «177379037» как вывод для первой строки)

Вот HTML:

          <div class="gui-select">
                  <div class="product-configure">
                        <select id="custom-variants">
            <option selected="selected" disabled="disabled">Select an option</option>
                            <option data-value="177379037" data-status="available">Size : EU 40.5 (US 7)</option>
                            <option data-value="177379043" data-status="available">Size : EU 41.5 (US 8)</option>
                            <option data-value="177379223" data-status="available">Size : EU 42.5 (US 9)</option>


        </div>

Ответы [ 3 ]

2 голосов
/ 19 марта 2019

Вы можете использовать класс с атрибутом css selector

items = [item['data-value'] for item in soup.select('.product-configure [data-value]')]

Если есть только один класс для рассмотрения, вы можете использовать идентификатор для выбора

items = [item['data-value'] for item in soup.select('#custom-variants [data-value]')]
0 голосов
/ 19 марта 2019

Вы используете find_all, чтобы получить все теги <option>, затем распечатываете атрибут data-value. Обратите внимание, что не все теги option имеют этот атрибут, поэтому я добавил туда try, чтобы продолжить, если data-value не найдено.

html = '''         <div class="gui-select">
                  <div class="product-configure">
                        <select id="custom-variants">
            <option selected="selected" disabled="disabled">Select an option</option>
                            <option data-value="177379037" data-status="available">Size : EU 40.5 (US 7)</option>
                            <option data-value="177379043" data-status="available">Size : EU 41.5 (US 8)</option>
                            <option data-value="177379223" data-status="available">Size : EU 42.5 (US 9)</option>


        </div>'''

import bs4

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

elem = soup.find_all('option')
for each in elem:
    try:
        print (each['data-value'])
    except:
        continue

Выход:

177379037
177379043
177379223
0 голосов
/ 19 марта 2019

Вы можете использовать soup.find_all () и использовать dict с атрибутами

options = soup.find_all("option", {"data-value": True})

Результат:

for o in options:
    print(o.attrs["data-value"])

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