我正在抓取这个网站https://www.immobilienscout24.de/Suche/de/berlin/berlin/haus-kaufen?enteredFrom=one_step_search,并从这个变量:
square_meter_str = text.replace('m²', '').replace(',', '').strip()
我得到这些值:
所以这个变量应该刮掉房子内部的平方米,但它也会刮掉房子外面的平方米。我只想获取房屋内部的平方米,在本例中为 232、8426、175、140 等(因此每个奇数)。我怎样才能实现这一点,或者我可以以某种方式更改代码,使其只刮掉房子内部的平方米?232 1.264 8426 990 175 801 140 599 117 第581章 72 160 110 266 145 519 290 917 151 520 116 0 172 206 46 1.024 第479章 1.040 1.18904 第424章 29148 1.007 135 599 156 第444章
附注这是该变量所在函数的完整代码:
def extract_information(soup):
information = soup.find_all('dd', class_='font-highlight font-tabular')
links = [info.find_previous('div', class_='grid-item').find('a')['href'] for info in information]
for link, info in zip(links, information):
house_link = f"https://www.immobilienscout24.de{link}"
# Extract and print only the prices and square meters
text = info.getText().strip()
try:
if '€' in text:
# Remove euro sign and convert to int
price = int(text.replace('€', '').replace('.', '').replace(',', '').strip())
elif 'm²' in text:
# Remove square meter sign and convert to int
square_meter_str = text.replace('m²', '').replace(',', '').strip()
print(square_meter_str)
# Handle cases where dot is used as a thousand separator
if '.' in square_meter_str and square_meter_str.count('.') == 1:
# If there is only one dot, consider it as a thousand separator
square_meter_str = square_meter_str.replace('.', '')
elif '.' in square_meter_str and square_meter_str.count('.') > 1:
# If there are multiple dots, keep only the last one as the decimal point
square_meter_str = square_meter_str.rsplit('.', 1)[0] + square_meter_str.rsplit('.', 1)[1].replace('.', '')
# Convert to float, handle the case when it's zero
square_meter = float(square_meter_str) if square_meter_str else 0.0
# Check if square_meter is non-zero before division
if square_meter != 0:
price_per_square_meter = price / square_meter
# Check if price_per_square_meter is within the specified range
if 2000 <= price_per_square_meter <= 3000:
# Append data to the list for saving to Excel
house_data['House link'].append(house_link)
house_data['Price per square meter [€]'].append(price_per_square_meter)
except:
print("Price or the living space information is missing.")
return house_data
我尝试将其保存在列表中,然后循环列表以获取每个第二个值,但我没有工作。我什至尝试询问 ChatGPT 但没有帮助。
square_meters = square_meter_str.split(" ")[::2]
split 方法从原始字符串中创建一个字符串列表。步长为 2 的切片返回所有奇数元素。一个小注释:在您的评论中您提到转换为 int。为此,您仍然需要转换结果。例如,
square_meters = list(map(int,square_meter_str.split(" ")[::2]))
在您提供的具体结果中,您将收到错误,因为并非所有值都可以转换为整数。
list(map(int,[m for m in square_meter_str.split(" ") if not "." in m]))
或
list(map(int,[m for m in square_meter_str.split(" ")[::2] if not "." in m]))
会给你一个整数列表。