Попробуйте это:
>>> from bs4 import BeautifulSoup
>>>
>>> html = """
... <section class="field-name-field-mpd-total-capacity"><h2 class="field-label">Total Capacity: </h2><div class="field-items"><div class="field-item even">125 Mb/d</div></div></section> </td>
... """
>>>
>>> soup = BeautifulSoup(html, 'lxml')
>>> out = soup.find("div", { "class" : "field-item" })
>>> print(out)
<div class="field-item even">125 Mb/d</div>
>>> out.text
'125 Mb/d'
Первый аргумент find
- это ( обычно ) имя элемента, который будет найден.В приведенном примере произойдет сбой, так как в указанном классе нет элемента section
.Вы можете изменить его на div
для достижения желаемого результата.
Чтобы извлечь элементы данных из section
с элементами класса field-name-field-mpd-total-capacity
, вы можете использовать:
>>> from bs4 import BeautifulSoup
>>>
>>> html = '''<section class="field-name-field-mpd-total-capacity"><h2 class="field-label">Total Capacity: </h2><div class="field-items"><div class="field-item even">125 Mb/d</div></div></section> </td>'''
>>> soup = BeautifulSoup(html, 'lxml')
>>> section = soup.find('section', {'class': 'field-name-field-mpd-total-capacity'})
>>> [x.text for x in section.find_all('div', {'class': 'field-item'})]
['125 Mb/d']
Лично яДля меня было очень полезно преобразовать страницы, которые я скребу, в диктовки для облегчения работы.На основании предоставленной вами страницы, я думаю, это может помочь вам:
import requests
from bs4 import BeautifulSoup
response = requests.get('https://rbnenergy.com/node/6081')
soup = BeautifulSoup(response.text, 'lxml')
data = {}
for element in soup.find_all("section", { "class" : "field" }):
key = element.find('h2', {'class': 'field-label'})
content = element.find('div', {'class': 'field-items'}).text
data[key.text.rstrip(':\xa0')] = content
print(data)
Пример вывода:
{'Operator': 'Rangeland', 'Commodity': 'Crude Oil', 'Stage': 'Operational', 'Project Type': 'New Build', 'In Service Date': 'Q3/2016', 'Diameter': '12 inches', 'Length': '109 miles', 'Base Capacity': '125 Mb/d', 'Total Capacity': '125 Mb/d', 'Origin': 'Orla, TXUnited States', 'Destination': 'Midland, TXUnited States'}