Scrapy爬取Rightmove时如何在同一URL下实现多页房源翻页(不使用Selenium)
解决Rightmove爬虫无URL变化的翻页问题(无需Selenium)
嘿,我完全懂你遇到的麻烦!Rightmove的分页确实是靠JS动态加载的,下一页按钮根本没有直接跳转链接,而是通过URL里的index参数控制房源起始位置——每页固定显示24条,第1页对应index=0,第2页是index=24,第3页index=48,以此类推。不用Selenium完全能搞定,下面给你具体方案和代码修改:
核心思路
我们不用纠结下一页按钮的链接,直接构造带不同index值的URL就能实现翻页,步骤很清晰:
- 先从页面提取总房源数量
- 按每页24条的规则,算出需要爬取的总页数
- 循环生成每个页面的URL,复用你的
parse方法处理内容
修改后的爬虫代码
import scrapy class listingsSpider(scrapy.Spider): name = 'listings' # 修正初始URL的转义字符,把&改成&避免解析问题 start_urls = ['https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=STATION%5E1712&maxPrice=500000&radius=0.5&sortType=10&propertyTypes=&mustHave=&dontShow=&furnishTypes=&keywords='] # Rightmove固定每页显示24条房源 PAGE_SIZE = 24 def parse(self, response): current_index = int(response.url.split("index=")[-1]) if "index=" in response.url else 0 self.logger.info(f'正在处理起始位置为 {current_index} 的页面') # 提取当前页面房源信息(保留你原有的逻辑,也可以优化xpath让结果更整洁) listings = response.xpath('//h2[@class="propertyCard-title"]') for listing in listings: yield { 'Listing': listing.get().strip() } # 提取总房源数 total_results_text = response.xpath('//span[@class="searchHeader-resultCount"]/text()').get() if not total_results_text: self.logger.warning("无法获取总房源数,终止翻页") return # 处理带逗号的数字字符串,比如"1,234"转成整数1234 total_results = int(total_results_text.replace(',', '')) # 计算下一页的起始位置 next_index = current_index + self.PAGE_SIZE # 只要下一页起始位置小于总房源数,就继续爬取 if next_index < total_results: # 构造下一页URL if "index=" in response.url: next_url = response.url.split("index=")[0] + f"index={next_index}" else: next_url = response.url + f"&index={next_index}" yield scrapy.Request(next_url, callback=self.parse)
关键细节说明
- URL参数修正:初始URL里的
&要改成&,否则Scrapy解析URL会出错 - 总房源数提取:Rightmove在页面顶部会显示总结果数,我们提取数字部分并转成整数,用来判断何时停止翻页
- 翻页终止条件:当
next_index超过总房源数时,停止请求,避免无效爬取 - 反爬提示:记得在
settings.py里设置真实的USER_AGENT,还可以加DOWNLOAD_DELAY控制爬取速度,降低被封风险
为什么你的原代码没生效?
你原代码里试图提取下一页按钮的href,但Rightmove的下一页按钮是通过JavaScript触发请求的,根本没有直接的href属性,所以pageTest一直是None,自然不会触发翻页。而构造index参数的方法完全绕开了这个问题,效率和普通Scrapy请求一样高。
内容的提问来源于stack exchange,提问作者Luke Ashton
相关产品推荐
相关产品推荐

