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

使用BeautifulSoup爬取Redfin数据时出现空DataFrame如何解决

错误原因及修复方案

核心错误点

  • 列表页请求未携带headers,直接触发Redfin反爬策略,返回的不是正常房源页面,自然找不到对应元素
  • 分页URL格式错误,Redfin的分页路径为/page-页码,你写的_={page}后缀不符合平台规则,请求到的是404页面
  • 存储数据的productlinks和p列表放在了分页循环内部,每翻一页就会清空之前存储的所有数据,即使前面爬取到内容最后也会被清空
  • 没有加异常捕获逻辑,一旦某个页面结构变动、或者单房源页没有对应价格元素,就会出现报错导致数据为空

修正后的代码

import requests
from bs4 import BeautifulSoup
import pandas as pd
import time

headers ={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
    }
# 把列表定义到循环外部,避免数据被重置
productlinks=[]
p=[]

for page in range(1, 5):
    # 修正分页URL格式
    url = f'https://www.redfin.com/city/5357/WA/Edmonds/page-{page}'
    # 列表页请求也加上headers
    r = requests.get(url, headers=headers)
    # 加延迟,避免触发反爬
    time.sleep(2)
    soup=BeautifulSoup(r.content, 'html.parser')
    tra=soup.find_all('div',class_='bottomV2')
    
    for links in tra:
        try:
            link=links.find('a',href=True)
            comp=link['href']
            abs_url = f'https://www.redfin.com{comp}'
            productlinks.append(abs_url)
        except:
            continue
        
for link in productlinks:
    try:
        r =requests.get(link,headers=headers)
        time.sleep(1)
        soup=BeautifulSoup(r.content, 'html.parser')
        price=soup.find('div',class_='statsValue').text
        p.append(price)
    except:
        # 单页爬取失败跳过,避免整体数据为空
        continue

df = pd.DataFrame({'price':p})
print(df)

额外说明

Redfin反爬机制比较严格,如果修改后还是拿不到数据,可以替换更新版本的User-Agent,或者改用Selenium、Playwright等无头浏览器工具模拟真实用户操作爬取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:54:07