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

