使用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
相关产品推荐
相关产品推荐

