使用BeautifulSoup提取HTML中房屋链接、标题、面积、楼层字段
解决方法
1. 提取item-link的链接与标题属性
BeautifulSoup中提取标签属性可直接调用标签对象的get()方法,属性不存在时会返回None避免报错,实现代码如下:
# 先获取a标签对象 item_link_tag = all[0].find("a", {"class": "item-link"}) # 提取href属性 item_url = item_link_tag.get("href") # 提取title属性 item_title = item_link_tag.get("title")
2. 提取房屋面积、楼层字段
同类名的item-detail标签在示例HTML中按固定顺序排列:第1个是户型、第2个是面积、第3个是楼层,调用find_all()获取全部同类标签后按索引取值即可:
# 获取所有item-detail标签的列表 detail_tags = all[0].find_all("span", {"class": "item-detail"}) # 索引1对应面积,strip()用于清除首尾多余空白字符 house_area = detail_tags[1].text.strip() # 索引2对应楼层 house_floor = detail_tags[2].text.strip()
如果担心页面结构变动导致顺序偏移,可增加内容特征判断逻辑:
house_area = "" house_floor = "" for tag in detail_tags: tag_text = tag.text.strip() if "m²" in tag_text: house_area = tag_text elif "floor" in tag_text: house_floor = tag_text
完整可运行提取代码示例
# 已有提取逻辑 price = all[0].find("span",{"class":"item-price h2-simulated"}).text tipology = all[0].find("span",{"class":"item-detail"}).text contact = all[0].find("span",{"class":"icon-phone item-not-clickable-phone"}).text # 新增提取逻辑 item_link_tag = all[0].find("a", {"class": "item-link"}) item_url = item_link_tag.get("href") item_title = item_link_tag.get("title") detail_tags = all[0].find_all("span", {"class": "item-detail"}) house_area = detail_tags[1].text.strip() house_floor = detail_tags[2].text.strip()
内容的提问来源于stack exchange,提问作者Carlos Filipe Novais
相关产品推荐
相关产品推荐

