无法从变量中获取某些元素

问题描述 投票:0回答:1

我正在抓取这个网站https://www.immobilienscout24.de/Suche/de/berlin/berlin/haus-kaufen?enteredFrom=one_step_search,并从这个变量:

square_meter_str = text.replace('m²', '').replace(',', '').strip()

我得到这些值:

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章

所以这个变量应该刮掉房子内部的平方米,但它也会刮掉房子外面的平方米。我只想获取房屋内部的平方米,在本例中为 232、8426、175、140 等(因此每个奇数)。我怎样才能实现这一点,或者我可以以某种方式更改代码,使其只刮掉房子内部的平方米?

附注这是该变量所在函数的完整代码:

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 但没有帮助。

python selenium-webdriver
1个回答
1
投票
我还没有测试你的函数,但是要从结果中提取你想要的元素,你可以在空格上分割字符串,然后跨过奇数元素。

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]))
会给你一个整数列表。

© www.soinside.com 2019 - 2024. All rights reserved.