Я предполагаю, что вы используете BeautifulSoup 4.7+. Некоторые атрибуты в Beautiful Soup обрабатываются немного по-особенному, и в 4.7 конечный результат немного отличается от того, что было в <= 4.6. </p>
Атрибуты, которые обычно обрабатываются как списки, разделенные пробелами, обрабатываются немного иначе, чем все остальные атрибуты. class
оказывается одним из этих атрибутов, который обычно обрабатывается как разделенные пробелами списки. BeautifulSoup на самом деле хранит эти атрибуты не так, как они есть в HTML-документе, но фактически сохраняет их как список классов (удаленные пробелы): "class1 class2 "
-> ['class1', 'class2']
. Когда ему нужно оценить атрибут класса как строку, он повторно собирает класс, соединяя каждое значение с пробелом между ними, но замечает, что такие вещи, как конечные пробелы, больше не присутствуют: "class1 class2"
.
Теперь я не утверждаю, что это интуитивно понятное занятие, а только то, что делает BeautifulSoup. Лично я предпочел бы, чтобы BeautifulSoup сохранял их как исходную строку, а затем разбивал их по списку при необходимости, но это не то, что они делают.
Теперь в BeautifulSoup <= 4.6, я считаю, что конечный пробел сохраняется, но имеет ряд других причуд. Но в вашем случае, 4.7+, вам просто нужно предположить, что конечные и начальные пробелы игнорируются и что пробел свернут в одно пространство между классами. Так что, в вашем случае, просто оставьте пробел позади. </p>
soup.find('div',{"class": "carResultRow_OfferInfo_Supplier-wrap"})
Подробнее об этом поведении можно прочитать здесь: https://bugs.launchpad.net/beautifulsoup/+bug/1824502.
Пример
from bs4 import BeautifulSoup
html = """
<div class="carResultRow_OfferInfo_Supplier-wrap ">
<h3 class="carResultRow_OfferInfo_SupplierLabel">Servicio proporcionado por:</h3>
<img src="https://cdn2.rcstatic.com/images/suppliers/flat/ocarrol_logo.gif" title="Ocarrol" alt="Ocarrol">
<h4 style="" xpath="1">Ocarrol</h4>
<a href="InfoPo=0&driversAge=30&os=1" onclick="GAQPush('cboxElement">Términos y condiciones</a>
</div>
"""
soup = BeautifulSoup(html, 'html.parser')
print(soup.find('div',{"class": "carResultRow_OfferInfo_Supplier-wrap"}).find('h4'))
выход
<h4 style="" xpath="1">Ocarrol</h4>