Игнорировать первый из двух div с тем же классом в BeautifulSoup - PullRequest
0 голосов
/ 28 марта 2019

Я хочу очистить несколько URL, которые имеют 2 divs, используя те же class="description",

Исходный код примера URL выглядит следующим образом:

<!-- Initial HTML here -->

<div class="description">
<h4> Anonymous Title </h4>
<div class="product-description">
<li> Some stuff here </li>
</div>
</div>

<!-- Middle HTML here -->

<div class="description">
Some text here
</div>

<!-- Last HTML here -->

I 'Я удалил его, используя BeautifulSoap, используя следующий скрипт

# imports etc here
description_box = soup.find('div', attrs={'class': 'description'})
description = description_box.text.strip()
print description

При запуске он дает мне первый div только с class="description", однако я хочу второй div только с class="description".

Любые идеи, как я могу игнорировать первый div и просто очистить второй?

PS Первый div всегда имеет h4 тегов, а второй div имеет только простой текст между тегами.

Ответы [ 3 ]

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

Если вы сделаете .find_all, он вернет все в списке.Тогда нужно просто выбрать второй элемент в этом списке, используя индекс 1:

html = '''<!-- Initial HTML here -->

<div class="description">
<h4> Anonymous Title </h4>
<div class="product-description">
<li> Some stuff here </li>
</div>
</div>

<!-- Middle HTML here -->

<div class="description">
Some text here
</div>

<!-- Last HTML here -->'''

soup = BeautifulSoup(html, 'html.parser')
divs = soup.find_all('div', {'class':'description'})
div = divs[1]

Вывод:

print (div)
<div class="description">
Some text here
</div>
0 голосов
/ 28 марта 2019

Вы можете использовать тип с селектором класса в css и индексировать в возвращаемую коллекцию

print(soup.select('div.description')[1].text)
0 голосов
/ 28 марта 2019

Используйте css-selector, поскольку он содержит атрибут nth-of-type, чтобы выбрать n-й элемент вашей спецификации.Кроме того, синтаксис чище.

description_box = soup.select("div.description:nth-of-type(2)")[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...