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

Scrapy结合Selenium开发招聘爬虫速度慢、无法翻页问题求助

问题解决方案

问题1:请求速度过慢优化方案

  • 优先替换Selenium请求为Scrapy原生请求:你当前所有请求都走浏览器加载,会额外加载图片、CSS、JS等冗余资源,耗时是原生请求的5-10倍。你可以先查看目标网站的搜索规则,直接构造关键词+城市的搜索URL,无需用Selenium模拟输入点击。再检查列表页、详情页的静态源码是否包含所需数据,若存在直接用scrapy.Request发起请求即可。
  • 优化Selenium启动参数:如果必须用Selenium应对反爬,给驱动加以下配置减少资源消耗:
    from selenium.webdriver.chrome.options import Options
    chrome_options = Options()
    chrome_options.add_argument("--headless=new") # 无头模式,不加载GUI
    chrome_options.add_argument("--blink-settings=imagesEnabled=false") # 禁用图片加载
    chrome_options.add_argument("--disable-gpu")
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--disable-extensions")
    
  • 调低不必要的等待时长:你当前每个SeleniumRequest设置了固定wait_time=3,可根据页面实际加载速度调低到1-2秒,显式等待只要检测到目标元素出现就会终止等待,无需设置过长的固定等待时间。
  • 调高Scrapy并发配置:在settings.py中修改CONCURRENT_REQUESTS = 32(默认是16),可同时发起更多请求,提升整体爬取效率。

问题2:下一页无法跳转的修复方案

  • 首先修正分页XPath表达式:你当前写的XPath是//div[@id='searchPagination']/li[@class='next']/a/@href,经校验目标网站的分页容器是<ul>标签而非<div>,正确的XPath应为:
    next = response_obj.xpath("//ul[@id='searchPagination']/li[contains(@class, 'next')]/a/@href").get()
    
  • 打印下一页链接做校验:拿到next值后先打印出来,确认是否能拿到正确的分页链接。如果拿不到说明标签结构有变化,重新调试XPath即可。
  • 若分页是JS触发跳转:如果下一页按钮没有直接的href属性,而是点击触发JS跳转,就不要构造SeleniumRequest访问href,改为在当前driver中模拟点击下一页按钮,再获取新的page_source解析数据。

其他代码优化建议

  • 移除init_request方法中多余的return self.initialized(),你已经yield了初始化请求,额外的return会导致初始化逻辑异常。
  • 可以不用继承InitSpider,直接继承普通的scrapy.Spider即可满足需求,减少不必要的框架逻辑开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:48:03