You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

网页爬取无返回值求助:38页房产网站数据爬取失败

问题分析与修正方案

原代码的核心问题

  1. 列表覆盖而非追加:第一个循环中每次给lists重新赋值,循环结束后lists仅保留最后一页的元素,前面页面的数据全部丢失。
  2. 选择器错误:soup.select("ct-div-block property-outer")写法错误,类选择器需要用.前缀,多个类名用.连接,正确写法是.ct-div-block.property-outer,否则无法匹配到目标元素。
  3. 循环范围不足:range(1,38)只会遍历1到37页,要爬取38页需改为range(1,39)。
  4. 数据未全局存储:第二个循环在页码循环外部,且每次仅赋值单个info,没有将所有页面的数据收集到一个全局列表中。

修正后的代码

from bs4 import BeautifulSoup
import requests

# 初始化全局列表存储所有页面的房产数据
all_properties = []

# 遍历1到38页
for page in range(1, 39):
    # 发起请求,处理可能的请求异常
    try:
        response = requests.get(f"https://rah.co.uk/property_area/to-buy/{page}.html")
        response.raise_for_status()  # 检查请求是否成功
    except requests.exceptions.RequestException as e:
        print(f"第{page}页请求失败: {e}")
        continue
    
    soup = BeautifulSoup(response.content, "lxml")
    # 正确使用类选择器获取所有房产项
    property_items = soup.select(".ct-div-block.property-outer")
    
    # 遍历当前页的房产项,提取数据并追加到全局列表
    for item in property_items:
        price = item.find("li", class_="ct-code-block property-price").get_text(strip=True)
        address = item.find("li", class_="ct-text-block property-name").get_text(strip=True)
        all_properties.append([price, address])

# 打印所有收集到的数据
for info in all_properties:
    print(info)

关键修改说明

  • 新增all_properties全局列表,用于存储所有页面的房产数据,每次遍历页面时向列表追加数据而非覆盖。
  • 修正CSS选择器,确保能正确匹配到目标元素。
  • 调整循环范围到1,39,覆盖全部38页。
  • 加入请求异常处理,避免单页请求失败导致整个程序崩溃。
  • 使用get_text(strip=True)去除文本中的多余空格和换行,让数据更整洁。

内容的提问来源于stack exchange,提问作者Zarathustra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 14:13:14