返回顶部
首页 > 资讯 > 后端开发 > Python >selenium在scrapy中的使用代码
  • 554
分享到

selenium在scrapy中的使用代码

2024-04-02 19:04:59 554人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

在通过scrapy框架进行某些网站数据爬取的时候,往往会碰到页面动态数据加载的情况发生,如果直接使用scrapy对其url发请求,是绝对获取不到那部分动态加载出来的数据值。但是通过观

在通过scrapy框架进行某些网站数据爬取的时候,往往会碰到页面动态数据加载的情况发生,如果直接使用scrapy对其url发请求,是绝对获取不到那部分动态加载出来的数据值。但是通过观察我们会发现,通过浏览器进行url请求发送则会加载出对应的动态加载出的数据。那么如果我们想要在scrapy也获取动态加载出的数据,则必须使用selenium创建浏览器对象,然后通过该浏览器对象进行请求发送,获取动态加载的数据值。本文重点给大家介绍selenium在scrapy中的使用,具体内容如下所示:

使用目的

爬取网易新闻国内、国际、军事、航空4个版块的新闻。在测试中发现各版块的新闻是动态加载的,如果直接爬取无法获取,使用selenium帮助获取此部分数据。

代码

spider


import scrapy
from selenium import WEBdriver
from wangyiPro.items import WangyiproItem

class WangyiSpider(scrapy.Spider):
    name = 'wangyi'
    # allowed_domains = ['www.xxx.com']
    start_urls = ['https://news.163.com/']
    model_url = []

   
    hro = webdriver.Chrome()

    def parse(self, response):
    # 从所有版块中筛选出所需要下载的4个版块
        li_list = response.xpath('/html/body/div[1]/div[1]/div[2]/div[2]/div[2]/div[2]/div/ul/li')
        indexs = [3,4,6,7]
        for index in indexs:
            model_li = li_list[index]
            model_list = model_li.xpath('./a/@href').extract_first()
            self.model_url.append(model_list)
        for url in self.model_url:
            yield scrapy.Request(url=url,callback=self.parse_model)

    # 数据解析:新闻标题+新闻详情页的url(动态加载数据)
    def parse_model(self,response):
        # 直接对response解析无法获取该数据(动态加载数据)
        # 无法拿到动态加载数据返回的响应数据就不足
        # 使用中间件修改不满足需求的响应对象中的响应数据,将其改为包含动态加载数据的响应数据
        div_list = response.xpath('/html/body/div/div[3]/div[4]/div[1]/div[1]/div/ul/li/div/div')
        for div in div_list:
            title = div.xpath('./div/div[1]/h3/a/text()').extract_first()
            new_url_detail = div.xpath('./div/div[1]/h3/a/@href').extract_first()

            if new_url_detail:
                item = WangyiproItem()
                item['title'] = title


                yield scrapy.Request(url=new_url_detail,callback=self.parse_detail,meta={'item':item})


    def parse_detail(self,response):
        # 返回的列表,需要将其转换为字符串
        content = response.xpath('/html/body/div[3]/div[1]/div[3]/div[2]/p/text()').extract()
        content = ''.join(content)
        item = response.meta['item']
        item['content'] = content

        yield item

    # 重写爬虫类父类方法,该方法在爬虫程序执行结束后立即执行
    def closed(self,spider):
        # 打开selenium需要关闭
        self.hro.quit()

middlewares


from time import sleep
from scrapy.Http import HtmlResponse#scrapy封装好的响应类

class WangyiproDownloaderMiddleware:


    def process_request(self, request, spider):

        return None

    # 拦截所有的响应对象
    # 整个工程发起的请求:1+4+n 对应相同的响应
    def process_response(self, request, response, spider):
        # 从所有拦截对象中找到4个需修改的响应对象
        if request.url in spider.model_url:
            hro = spider.hro
            hro.get(request.url)
            sleep(2)
            # 网页下拉到底,获取更多动态加载数据
            hro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
            sleep(1)
            page_text = hro.page_source
            # response.text = page_text
            # 返回一个新的响应对象
            return HtmlResponse(url=request.url,body=page_text,encoding='utf-8',request=request)

        # 如果不是需要修改的响应数据,不做修改
        else:
            return response

    def process_exception(self, request, exception, spider):

        pass

效果

在这里插入图片描述

总结

  •  hro = webdriver.Chrome() 我是直接将Chromedriver写入配置文件,所以直接实例化对象即可,如果没有写入配置文件,写为hro = webdriver.Chrome(executable_path='绝对路径')。尝试过将Chromedriver放到PyCharm的文件下写入相对路径,没有成功。
  • 使用selenium在结束后需要关闭,可以改写爬虫类父类方法closed()
  • settings里修改三件套并且打开下载中间件和items

以上就是selenium如何在scrapy中的使用的详细内容,更多关于scrapy中使用selenium的资料请关注编程网其它相关文章!

--结束END--

本文标题: selenium在scrapy中的使用代码

本文链接: https://lsjlt.com/news/126731.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • selenium在scrapy中的使用代码
    在通过scrapy框架进行某些网站数据爬取的时候,往往会碰到页面动态数据加载的情况发生,如果直接使用scrapy对其url发请求,是绝对获取不到那部分动态加载出来的数据值。但是通过观...
    99+
    2024-04-02
  • scrapy中selenium的应用
      在通过scrapy框架进行某些网站数据爬取的时候,往往会碰到页面动态数据加载的情况发生,如果直接使用scrapy对其url发请求,是绝对获取不到那部分动态加载出来的数据值。但是通过观察我们会发现,通过浏览器进行url请求发送则会加载出...
    99+
    2023-01-30
    scrapy selenium
  • 使用 Scrapy 爬取股票代码
    个人博客: https://mypython.me 源码地址: https://github.com/geeeeeeeek/scrapy_stock 抓取工具:scrapy scrapy 介绍 Scrapy是一个为了爬取网站数据,提取结构...
    99+
    2023-01-30
    股票代码 Scrapy
  • Python selenium webdriver 基本使用代码分享
    目录前言一、Pip安装&创建Bowser对象1.Pip install selenium2.创建Bowser对象二、webdriver.ChromeOptions配置三、常用...
    99+
    2022-11-13
    Python selenium webdriver使用 Python selenium webdriver
  • 如何在python中使用scrapy模块
    这篇文章将为大家详细讲解有关如何在python中使用scrapy模块,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。二、基本使用2.1 环境安装1.linux和mac操作系统:pip ...
    99+
    2023-06-06
  • python中Scrapy shell的使用
    前言: 我们想要在爬虫中使用xpath、beautifulsoup、正则表达式,css选择器等来提取想要的数据,但是因为scrapy是一个比较重的框架,每次运行都要等到一段时间,因此...
    99+
    2024-04-02
  • 在Java中使用Jwt的示例代码
    目录JWT 特点 1. JWT 的原理 2. JWT 的数据结构 2.1 Header 2.2 Payload 2.3 Signature 3. 在 Java 中使用 JWT 特点 ...
    99+
    2024-04-02
  • 怎么在Django中使用Scrapy爬取数据
    怎么在Django中使用Scrapy爬取数据?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在django项目根目录位置创建scrapy项目,django_12是django...
    99+
    2023-06-14
  • Scrapy的中间件如何使用
    这篇文章主要讲解了“Scrapy的中间件如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Scrapy的中间件如何使用”吧!Scrapy 结构概述:一、下载器中间件(Downloader...
    99+
    2023-07-02
  • 如何在 Python 中使用 JavaScript 代码?
    在现代 Web 开发中,前端技术的重要性越来越受到重视。JavaScript 是前端开发中不可或缺的一部分,它可以让网站具备更加丰富的交互体验和更高的动态性。Python 是一种广泛应用于 Web 开发、数据科学和人工智能等领域的编程语言。...
    99+
    2023-10-01
    文件 numpy javascript
  • js代码怎么在html中使用
    在 html 中使用 javascript 代码可通过以下方式:外部脚本:使用 内联脚本:使用 // javascript 代码脚本位置:通常放置在 末尾事件处理程序:使用 onc...
    99+
    2024-05-16
  • 怎么用代码搞定Scrapy随机 User-Agent
    今天就跟大家聊聊有关怎么用代码搞定Scrapy随机 User-Agent,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。摘要:爬虫过程中的反爬措施非常重要,其中设置随机 User-Ag...
    99+
    2023-06-04
  • python selenium chrome使用验证代理
    python selenium chrome使用验证代理#!/usr/bin/env python # coding: utf-8 import zipfile import string ...
    99+
    2023-01-30
    python selenium chrome
  • Xpath元素选择器怎么在Scrapy中使用
    这期内容当中小编将会给大家带来有关Xpath元素选择器怎么在Scrapy中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 元素的多级定位与跳级定位多级定位:依靠html中的多级元素逐步缩小范围re...
    99+
    2023-06-14
  • Python中Selenium的基本使用
    目录 一、Selenium是什么? 二、使用步骤   1.引入库   2.下载浏览器驱动   3.配置浏览器驱动    4.创建WebDriver对象   4.1.options    4.2.service   4.3...
    99+
    2023-09-29
    selenium python
  • Selenium中的option使用示例
    目录01. 无痕模式02. 启动时窗口大小设置03. 去掉浏览器被自动化软件控制的提示04. 伪造user-agent05. 禁止弹窗在上一篇文章Selenium中免登录的实现方法一...
    99+
    2022-12-14
    Selenium中的option用法 Selenium option使用
  • scrapy的简单使用
    使用之前的创建虚拟环境方法(pipenv) 创建虚拟环境并进入虚拟环境 mkdir douban cd douban pipenv install pipenv shell 再安装我们的scrapy pipenv install s...
    99+
    2023-01-30
    简单 scrapy
  • 如何在python中安装与使用selenium库
    如何在python中安装与使用selenium库?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。第一步:python中安装selenium库和其他所有Python库一样,se...
    99+
    2023-06-15
  • Python中的Scrapy框架怎么使用
    这篇文章主要讲解了“Python中的Scrapy框架怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中的Scrapy框架怎么使用”吧!安装Scrapy首先,您需要在您的计算...
    99+
    2023-07-05
  • 如何在HTML中使用颜色代码?
    如何在 HTML 中使用颜色代码? 在 HTML 中,可以使用颜色名称、十六进制代码或 RGB 代码来指定颜色。 颜色名称 HTML 中提供了多种颜色名称,可以直接使用。例如: <body bgcolor="blue"> 将页...
    99+
    2024-02-14
    HTML,网页设计,颜色代码,十六进制代码,RGB 代码
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作