使用BeautifulSoup爬取房产网站时如何提取嵌套的房产类型文本
解决方案
目标页面中你需要提取的加粗房产类型字段,是每个div.inline-group节点下h3标签内部的<strong>节点内容,直接精准定位该节点提取即可。
修改后的完整代码
from requests_html import HTMLSession from bs4 import BeautifulSoup import pandas as pd import re s = HTMLSession() url = 'https://www.imoti.net/bg/obiavi/r/prodava/bulgaria/?page=1&sid=iXMpXe' r = s.get(url) soup = BeautifulSoup(r.text, 'html.parser') def get_prices(urls): prices = [] type_of_property = [] # 先一次性获取所有房源节点,避免重复遍历整个列表 estate_list = soup.find('ul', {'class': 'list-view real-estates'}).find_all('li', class_='') for item in estate_list: # 提取价格 price_text = item.find('strong', {'class': 'price'}).get_text() price_arr = re.findall('[0-9]+', price_text) final_price = ''.join(price_arr) prices.append(final_price) # 提取加粗的房产类型字段 property_type = item.find('div', {'class': 'inline-group'}).find('h3').find('strong').get_text(strip=True) type_of_property.append(property_type) return prices, type_of_property print(get_prices(url))
关键修改说明
- 优化了遍历逻辑:一次性获取所有房源节点后逐个提取所需字段,不需要两次查询整个房源列表,运行效率更高
- 房产类型提取改为精准定位:从每个房源节点下的
div.inline-group依次找到h3标签、内部的strong标签,直接提取目标文本,同时用strip=True自动去掉首尾多余的空白字符 - 简化了价格拼接逻辑,用
join方法替代原有循环拼接代码,写法更简洁
内容的提问来源于stack exchange,提问作者Tsvetan Donov
相关产品推荐
相关产品推荐

