Python请求Zillow分页失效:指定页码仍返回首页数据
问题
我尝试通过分页请求Zillow网站上托伦斯市的多页租房列表,否则只能获取第一页数据。但即便手动指定具体页码,代码仍仅加载第一页内容。
# Rent import requests from bs4 import BeautifulSoup as soup import json url = 'https://www.zillow.com/torrance-ca/rentals' params = { 'q': {"pagination":{"currentPage": 1},"isMapVisible":False,"filterState":{"fore":{"value":False},"mf":{"value":False},"ah":{"value":True},"auc":{"value":False},"nc":{"value":False},"fr":{"value":True},"land":{"value":False},"manu":{"value":False},"fsbo":{"value":False},"cmsn":{"value":False},"fsba":{"value":False}}},"isListVisible":True } headers = { # headers were copied from network tab on developer tools in chrome } html = requests.get(url=url,headers=headers, params=params) html.status_code bsobj = soup(html.content, 'lxml') for script in bsobj.find_all('script'): inner_text_with_string = str(script.string) if inner_text_with_string[:18] == '<!--{"queryState":': my_query = inner_text_with_string my_query = my_query.strip('><!-') data = json.loads(my_query) data = data['cat1']['searchResults']['listResults'] print(data)
这段代码返回约40条房源信息,但将"pagination":{"currentPage": 1}改为"pagination":{"currentPage": 2}后,仍返回相同的房源列表,仿佛pagination参数未被识别。
我认为这些参数是正确的,因为它们直接从URL查询字符串中提取,并使用格式化工具处理过。请问我哪里操作出错了?
解决方法
- 参数格式错误:你直接把Python字典作为
q参数的值传入requests.get,但Zillow要求q参数是JSON字符串格式,不是原始字典。当你传入字典时,requests会自动把它编码成URL查询参数的键值对,而不是正确的JSON字符串,导致Zillow无法解析分页参数。 - 修正步骤:
- 将
params里的q值转换为JSON字符串,使用json.dumps()处理:params = { 'q': json.dumps({ "pagination":{"currentPage": 2}, "isMapVisible":False, "filterState":{ "fore":{"value":False}, "mf":{"value":False}, "ah":{"value":True}, "auc":{"value":False}, "nc":{"value":False}, "fr":{"value":True}, "land":{"value":False}, "manu":{"value":False}, "fsbo":{"value":False}, "cmsn":{"value":False}, "fsba":{"value":False} }, "isListVisible":True }) } - 确保请求头完整,尤其是
User-Agent、Cookie和Referer这些字段——Zillow会验证这些信息来识别合法请求,缺失的话可能返回默认第一页数据或者被拦截。
- 将
- 额外提醒:Zillow有反爬机制,频繁请求可能会被封禁IP,建议添加请求间隔时间,避免短时间内发送大量请求。
内容的提问来源于stack exchange,提问作者BAM
相关产品推荐
相关产品推荐

