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

使用requests+BeautifulSoup爬取房产网站仅返回20条数据问题求解

仅能抓取20条数据的原因

你当前请求的目标页面首屏默认只返回20条房产数据,剩余80条数据做了分页或者滚动懒加载处理,不会在首次页面请求的静态HTML中返回,因此你解析第一页的源码只能拿到20条结果,不会触发超时类报错。

完整获取100条数据的解决方案

方案1:构造分页请求批量抓取(优先推荐,性能更高)

  • 打开浏览器开发者工具的「网络」面板,点击页面的分页按钮,观察分页请求的参数规则:通常这类房产平台的分页会用page作为参数,比如第二页的请求地址格式为https://www.century21.com/real-estate/new-york-ny/LCNYNEWYORK/?page=2
  • 100条数据共分为5页,循环构造1-5页的请求地址,依次发送请求抓取每一页的20条数据即可。
  • 补充优化建议:请求时携带浏览器UA头伪装成正常访问,同时每次请求间隔1-2秒,避免触发反爬限制,示例请求写法如下:
import requests
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'
}
# 循环请求5页数据
for page in range(1, 6):
    url = f'https://www.century21.com/real-estate/new-york-ny/LCNYNEWYORK/?page={page}'
    r = requests.get(url, headers=headers)
    # 后续解析逻辑和原有代码一致

方案2:动态模拟浏览器加载(适合懒加载无明确分页的场景)

如果平台没有明确的分页参数,采用滚动到底部自动加载下一页的懒加载逻辑,可以用selenium或者playwright模拟浏览器滚动行为,等所有数据加载完成后再统一解析:

from selenium import webdriver
from bs4 import BeautifulSoup
import time

driver = webdriver.Chrome()
driver.get('https://www.century21.com/real-estate/new-york-ny/LCNYNEWYORK/')

# 模拟滚动5次,触发所有数据加载
for _ in range(5):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
    time.sleep(2)

# 拿加载完成的完整页面源码解析
soup = BeautifulSoup(driver.page_source, 'html.parser')
all = soup.find_all("div",{'class':'property-card-primary-info'})
# 后续解析逻辑和原有代码一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:06:03