如何从 div 中获取第一个字符串,其中嵌入了 div beautifulsoup4

How can I get the first string from a div that has a div embedded beautifulsoup4

我正在尝试从网站提取价格。

我写的代码可以做到这一点,但是当网站的价格也显示旧价格时,它 returns "none" 而不是价格字符串。

这是没有旧价格的代码示例(我的代码 returns 作为字符串)

<div class="xl-price rangePrice">
                            535.000 €  
                        </div>

这是旧价格的代码示例(我的代码 returns 为 "none")

    < div


class ="xl-price rangePrice" >


487.000 €
< span


class ="old-price" > 497.000 € < br > < / span >

< / div >

我试图从中提取代码的页面:pagelink

我的代码:

prices = []
for items in soup.find_all("div", {"class": "xl-price rangePrice"}):
    prices.append(items.string)

print(prices)

我遇到的另一个问题是 returns 值是这样的:

'\r\n\t\t\t\t\t\t\t\t298.000 € \r\n\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t\t145.000 € \r\n\t\t\t\t\t\t\t'

当我只想要数字时。

非常感谢您的帮助!

这是您问题的示例代码。

import re
import requests
page = requests.get("https://www.immoweb.be/en/search/apartment/for-sale/leuven/3000")
print(page.content)

from bs4 import BeautifulSoup
soup = BeautifulSoup(page.content, 'html.parser')

prices = []
for items in soup.find_all("div", {"class": "xl-price rangePrice"}):
if items.string:
    result = re.findall(r'\d+.\d+', items.string)
    prices.append(result[0])
else:
    soup1 = BeautifulSoup(str(items), 'html.parser')
    for item in soup1.find("div", {"class": "xl-price rangePrice"}):
        if item.string:
            result = re.findall(r'\d+.\d+', item.string)
            if len(result)>0:
                prices.append(result[0])

print(prices)
import requests
from bs4 import BeautifulSoup

r = requests.get(
    'https://www.immoweb.be/en/search/apartment/for-sale/leuven/3000')
soup = BeautifulSoup(r.text, 'html.parser')

for item in soup.findAll('div', attrs={'class': 'xl-price rangePrice'}):
    item = item.contents[0]
    print(item.strip()[0:-1])

输出:

298.000 
145.000 
275.000 
535.000 
487.000 
159.000 
325.000 
189.000 
139.000 
499.000 
520.000 
249.500 
448.000 
215.000 
225.000 
210.000 
215.000 
218.000 
232.000 
689.000 
228.000 
299.500 
169.000 
135.000 
549.000 
125.000 
160.000 
395.000 
430.000 
210.000 

我现在无法访问计算机,所以请考虑这个准伪代码:

new_price = div_elem.find(text=True, recursive=False)

find_res = div_elem.find('span', attrs={'class': 'old-price'})

if find_res:
    old_price = find_res.get_text(strip=True)

我尽量让事情变得容易理解。

如果您有任何问题,请告诉我:)