Как получить текст внутри класса, игнорируя текст следующего класса, который находится внутри - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь получить текст внутри class = "hardfact", но также получаю текст класса = "hardfactlabel color_f_03", потому что этот класс находится внутри hardfact.

.text.strip () получить текст обоих классов, потому что они вложенные.

from bs4 import BeautifulSoup as soup
from urllib.request import urlopen as uReq
import requests
import lxml

my_url = 'https://www.immowelt.de/expose/2QC5D4A?npv=52'

page = requests.get(my_url)
ct = soup(page.text, 'lxml')

specs = ct.find('div', class_="hardfacts clear").findAll('div', class_="hardfact")
for items in specs:
    e = items.text.strip()
    print(e)

Я получаю это

82,500 €

                                    Kaufpreis

47 м²

                                    Wohnfläche (ca.)

1

                                    Zimmer

и я хочу это

82,500 €

47 м²

1

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Вы можете использовать раздетые строки. Возможно, вы захотите добавить условие, чтобы обеспечить как минимум длину 3, прежде чем пытаться нарезать список.

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://www.immowelt.de/expose/2QC5D4A?npv=52')
soup = bs(r.content, 'lxml')
items = soup.select('.hardfact')[:3]

for item in items:
    strings = [string for string in item.stripped_strings]
    print(strings[0])
0 голосов
/ 22 мая 2019

Вот HTML-контент, который вы пытаетесь отсканировать:

<div class="hardfact ">
  <strong>82.500 €&nbsp;</strong>                                    
  <div class="hardfactlabel color_f_03">
    Kaufpreis      
  </div>
</div>

<div class="hardfact ">
  47 m²                                    
  <div class="hardfactlabel color_f_03">
    Wohnfläche (ca.)
  </div>
</div>

<div class="hardfact rooms">
  1                                    
  <div class="hardfactlabel color_f_03">
    Zimmer
  </div>
</div>

То, чего вы хотите достичь, это удалить теги div внутри, так что вы можете просто разложить div:

for items in specs:
  items.div.decompose()
  e = items.text.strip()
print(e)

Если ваш первый класс "hardfact" не содержит тега "strong", вы можете просто найти первый элемент, например, так:

e = items.find().text.strip()

, но мы не можем этого сделать, поэтому вам нужно разложитьтег div.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...