Доступ к тексту элемента span, встроенного в другой элемент span - PullRequest
1 голос
/ 21 июня 2020

Итак, я хотел бы получить содержимое всех этих элементов span и поместить их в словарь. Я могу получить доступ только к первому элементу диапазона, используя следующий код: Есть ли способ сделать это? Может быть, селен лучше?

<span class="font-size-15" style="vertical-align:top"><strong>Title of the 
product</strong></span>
<span>Seller: Staples </span>
<span>Description: Here you will find the product description</span>

МОЙ КОД

page_source=BeautifulSoup(page_source,"html.parser")
products = page_source.findAll("span"})

for product in products:
    product_name=product.span.text

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Вы можете использовать CSS селектор select. Вы можете попробовать:

from bs4 import BeautifulSoup

html_doc = """<span class="font-size-15" style="vertical-align:top"><strong>Title of the 
product</strong></span>
<span>Seller: Staples </span>
<span>Description: Here you will find the product description</span>"""

soup = BeautifulSoup(html_doc, 'lxml')

spans = soup.select('span')

dic = {}
i = 1
for span in spans:
    dic[i] = span.text
    i = i + 1

print(dic)

Выход будет:

{1: 'Title of the \nproduct', 2: 'Seller: Staples ', 3: 'Description: Here you will find the product description'}
0 голосов
/ 21 июня 2020

В приведенном выше коде html нет интервалов, встроенных в другие, поэтому было бы достаточно перебрать продукты и сохранить их текстовое содержимое в словаре, например:

dic = {}
i = 0
for product in products:
    dic[i] = product.getText()
    i += 1

print(dic)

Но предположим, что в каждом диапазоне будут встроенные промежутки, тогда вы снова используете метод findAll для элемента, как это:

dic = {}
i = 0
for product in products:
    spans = prodcut.findAll("span")
    for span in spans:
        dic[i] = span.getText()
        i += 1

print(dic)
...