Web-scarping, очистка супового набора BeautifulSoup от элементов

Прошу строго не судить, ибо пишу впервые (не только про этот пост, но и код). На днях понадобилось сделать web-scrapper,задача стояла в поиске текста, расположенного в такого рода контейнерах:

<div class="td_name">
                                                    Сахарница стекло alpina 10554 14,5x8,5cм                                            </div>

Среди прочего вот такого рода "мусора":

</h1></div>
                                                                <a name="anchor300880" id="anchor300880"></a>
                <div class="row dark ">
                    <div class="td_checkbox"><span
                                class="notice"></span><input                                 class="cookie_checkbox" id="300880" type="checkbox"></div>
                    <div class="td_img">
                                            </div>
                    <div class="td_name">
                                                    Сахарница стекло alpina 10554 14,5x8,5cм                                            </div>
                    <div class="td_proizv">alpina(home)</div>
                    <div class="td_nalich">шт</div>
                                            <div class="td_price">7,75</div>
                                    </div>
                                                <a name="anchor314970" id="anchor314970"></a>
                <div class="row  ">
                    <div class="td_checkbox"><span
                                class="notice"></span><input                                 class="cookie_checkbox" id="314970" type="checkbox"></div>
                    <div class="td_img">
                                            </div>
                    <div class="td_name">
                                                    Бокал стекло HTXB 180мл                                            </div>
                    <div class="td_proizv">ANHUI DELI HOUSEHOLD GLASS CO.LTD.</div>
                    <div class="td_nalich">шт</div>
                                            <div class="td_price">7,23</div>
                                    </div>
                                                <a name="anchor314971" id="anchor314971"></a>

Для этого путем поиска был написан ( возможно из говна и палок, судить вам - пишу впервые ) сей код:

    from selenium import webdriver
    from selenium.webdriver.firefox.options import Options
    from bs4 import BeautifulSoup

    options = Options()
    options.headless = True
    browser = webdriver.Firefox(options=options, executable_path=r'C:\Users\User\Downloads\geckodriver.exe')
    browser.get('https:// ')
    requiredHtml = browser.page_source
    soup = BeautifulSoup(requiredHtml, 'html5lib')
    div = soup.find_all('div', class_='td_name')
    print(div)

Результатом является:

[<div class="td_name">
                                                    Сахарница стекло alpina 10554 14,5x8,5cм                                            </div>, <div class="td_name">
                                                    Бокал стекло HTXB 180мл                                            </div>, <div class="td_name">
                                                    Бокал стекло S6981 200мл                                            </div>, <div class="td_name">

Хотелось бы привести результат к следующему виду:

                                                    Сахарница стекло alpina 10554 14,5x8,5cм
                                                    Бокал стекло HTXB 180мл    
                                                    Бокал стекло S6981 200мл                                            

А так же возможно ли вывести значения находящиеся в контейнерах:

<div class="td_price">7,75</div>
И придать им следующий вид?:

                                                    Сахарница стекло alpina 10554 14,5x8,5cм 7,75
                                                    Бокал стекло HTXB 180мл 7,23   
                                                    Бокал стекло S6981 200мл 7,23                                            

Заранее благодарен.


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

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

Судя по структуре html, нужная информация храниться в строках, которые и нужно парсить. Например, на странице две строки с товаром:

html = ' \
   '<a name="anchor300880" id="anchor300880"></a>' \
   '<div class="row dark ">' \
       '<div class="td_checkbox"><span class="notice"></span><input class="cookie_checkbox" id="300880" type="checkbox"></div>' \
       '<div class="td_img"></div>' \
       '<div class="td_name">Сахарница стекло alpina 10554 14,5x8,5cм</div>' \
       '<div class="td_proizv">alpina(home)</div>' \
       '<div class="td_nalich">шт</div>' \
       '<div class="td_price">7,75</div>' \
   '</div>' \
   'a name="anchor314970" id="anchor314970"></a>' \
   '<div class="row  ">' \
       '<div class="td_checkbox"><span class="notice"></span><input class="cookie_checkbox" id="314970" type="checkbox"></div>' \
       '<div class="td_img"></div>' \
       '<div class="td_name">Бокал стекло HTXB 180мл</div>' \
       '<div class="td_proizv">ANHUI DELI HOUSEHOLD GLASS CO.LTD.</div>' \
       '<div class="td_nalich">шт</div>' \
       '<div class="td_price">7,23</div>' \
   '</div>' \
   '<a name="anchor314971" id="anchor314971"></a>'

Тогда все строки это

rows = soup.find_all('div', class_='row')

Обход найденных строк и запись в массив словарей:

data = []
for row in rows:
    name = row.find('div', class_='td_name').get_text(strip=True)
    price = row.find('div', class_='td_price').get_text(strip=True)
    data.append({'name': name, 'price': price})

Ну, и вывод на печать:

for d in data:
    print(f'{d['name']} {d['price']')
→ Ссылка