使用Requests爬取网页返回空数组及JSON解析报错求助
问题解决:解析finn.no房源页面时JSON解析失败
问题原因
你请求的https://www.finn.no/realestate/homes/search.html?sort=PUBLISHED_DESC是HTML网页,并非JSON接口:
- 直接调用
r.json()返回空数组,是因为该响应不是标准JSON格式,requests尝试解析失败后返回空结果。 - 你将
str(r)转为JSON的操作完全错误:str(r)得到的是响应对象的字符串表示<Response [200]>,这根本不是JSON结构,必然触发JSONDecodeError。
正确解决方案
要提取该页面的房源数据,有两种可行方式:
方式1:调用官方API接口
打开浏览器开发者工具(F12),切换到「网络」标签页,刷新页面后筛选XHR/Fetch请求,找到返回房源JSON数据的API接口(通常URL包含api、json等关键词)。找到后直接请求该API即可获取标准JSON数据:
import requests # 示例API地址(需自行从开发者工具中获取真实接口) api_url = 'https://www.finn.no/api/realestate/homes/search' params = {'sort': 'PUBLISHED_DESC'} r = requests.get(api_url, params=params) data = r.json() print(data)
方式2:解析HTML页面
使用HTML解析库(如BeautifulSoup4)直接解析返回的网页内容,提取所需信息:
- 先安装依赖:
pip install beautifulsoup4 - 解析代码示例:
from bs4 import BeautifulSoup import requests url = 'https://www.finn.no/realestate/homes/search.html?sort=PUBLISHED_DESC' r = requests.get(url) # 解析HTML内容 soup = BeautifulSoup(r.text, 'html.parser') # 根据页面实际结构提取数据(以下选择器需自行验证调整) # 提取所有房源卡片 listing_cards = soup.find_all('article', class_='ads__unit') for card in listing_cards: # 提取标题 title = card.find('h2', class_='ads__unit__content__title').text.strip() # 提取价格 price = card.find('div', class_='ads__unit__content__price').text.strip() print(f"标题:{title},价格:{price}")
注意事项
- 请遵守网站的
robots.txt规则,避免高频次请求触发反爬机制,导致IP被封禁。 - 页面结构可能会随网站更新变化,需定期检查并调整HTML选择器。
内容的提问来源于stack exchange,提问作者SomeName
相关产品推荐
相关产品推荐

