python爬虫进阶篇:Scrapy中使用Selenium模拟Firefox火狐浏览器爬取网页信息

一、前言

接着上一篇的笔记,Scrapy爬取普通无反爬、静态页面的网页时可以顺利爬取我们要的信息。但是大部分情况下我们要的数据所在的网页它是动态加载出来的(ajax请求后传回前端页面渲染、js调用function等)。这种情况下需要使用selenium进行模拟人工操作浏览器行为,实现自动化采集动态网页数据。

二、环境搭建

  • Scrapy框架的基本依赖包(前几篇有记录)
  • selenium依赖包
    • pip install selenium==4.0.0a6.post2
    • pip install certifi
    • pip install urllib3==1.25.11
  • 安装Firefox浏览器和对应版本的驱动包
    • 火狐浏览器我用的是最新版121.0
    • 驱动的版本为0.3.0,见上方资源链接
    • 把驱动放到python环境的Scripts文件夹下

三、代码实现

  • settings设置
python 复制代码
SPIDER_MIDDLEWARES = {
   'stock_spider.middlewares.StockSpiderSpiderMiddleware': 543,
}

DOWNLOADER_MIDDLEWARES = {
   'stock_spider.middlewares.StockSpiderDownloaderMiddleware': 543,
}

ITEM_PIPELINES = {
   'stock_spider.pipelines.StockSpiderPipeline': 300,
}
  • middlewares中间件
python 复制代码
from selenium.webdriver.firefox.options import Options as firefox_options


spider.driver = webdriver.Firefox(options=firefox_options())  # 指定使用的浏览器
  • process_request
python 复制代码
    def process_request(self, request, spider):
        # Called for each request that goes through the downloader
        # middleware.

        # Must either:
        # - return None: continue processing this request
        # - or return a Response object
        # - or return a Request object
        # - or raise IgnoreRequest: process_exception() methods of
        #   installed downloader middleware will be called

        spider.driver.get("http://www.baidu.com")
        return None
  • process_response
python 复制代码
	from scrapy.http import HtmlResponse
    def process_response(self, request, response, spider):
        # Called with the response returned from the downloader.

        # Must either;
        # - return a Response object
        # - return a Request object
        # - or raise IgnoreRequest
        response_body = spider.driver.page_source

        return HtmlResponse(url=request.url, body=response_body, encoding='utf-8', request=request)

启动爬虫后就可以看到爬虫启动了浏览器驱动,接下来就可以实现各种模拟人工操作了

相关推荐
思绪无限5 分钟前
YOLOv5至YOLOv12升级:血细胞检测系统的设计与实现(完整代码+界面+数据集项目)
人工智能·python·深度学习·目标检测·计算机视觉·yolov12·血细胞检测
skywalk81632 小时前
发现Kotti项目的python包Beaker 存在安全漏洞
开发语言·网络·python·安全
天天进步20152 小时前
Python全栈项目:从零构建基于 Django 的知识管理系统(KMS)
开发语言·python·django
珎珎啊2 小时前
Python3 迭代器与生成器
开发语言·python
思绪无限3 小时前
YOLOv5至YOLOv12升级:金属锈蚀检测系统的设计与实现(完整代码+界面+数据集项目)
人工智能·python·深度学习·目标检测·计算机视觉·yolov12
yejqvow123 小时前
Pandas 高效实现组内跨行时间戳匹配与布尔标记
jvm·数据库·python
2501_921960853 小时前
协同本体论:元公理体系、普适演化律则与工程范式统一构建
python·重构·numpy·pandas·scipy
小锋java12343 小时前
【技术专题】Matplotlib3 Python 数据可视化 - Matplotlib3 绘制热力图(Heatmap)
python
书到用时方恨少!3 小时前
Python 面向对象进阶:多态——同一个接口,千种面孔
开发语言·python·多态·面向对象
AC赳赳老秦3 小时前
OpenClaw实战案例:用Agent实现每日工作日报自动生成+发送
人工智能·python·职场和发展·eclipse·github·deepseek·openclaw