Scrapy框架 -- 结合selenium获取动态加载数据

简介: Scrapy框架 -- 结合selenium获取动态加载数据

一、新建一个Scrapy项目wangyi,进入该项目,创建wangyipc爬虫文件

scrapy startproject wangyi
cd wangyi
scrapy genspider wangyipc www.xxx.com

二、修改settings文件

ROBOTSTXT_OBEY = False
LOG_LEVEL = 'ERROR'
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"

三、获取这四个板块的响应内容


start_urls = ["https://XXXX.com/"]
    板块链接=[]
    def parse(self, response):
        板块下标=[1,2,4,5]
        板块列表=response.xpath('//*[@id="index2016_wrap"]/div[3]/div[2]/div[2]/div[2]/div/ul/li')
        for i in 板块下标:
            板块链接=板块列表[i].xpath('./a/@href').extract_first()
            板块名字=板块列表[i].xpath('./a/text()').extract_first()
            self.板块链接.append(板块链接)
            print(板块名字,板块链接)

运行结果:

国内 https://news.163.com/domestic/
国际 https://news.163.com/world/
军事 https://war.163.com/
航空 https://news.163.com/air/

四、由于新闻的详细信息是动态加载,所以我们需要结合selenium来进行操作

1、导入浏览器驱动

2、在爬虫文件创建浏览器对象

from selenium import webdriver
浏览器对象=webdriver.Chrome(executable_path='../../chromedriver.exe')

3、通过中间操作

def process_response(self, request, response, spider):
        板块链接=spider.板块链接
        if request.url in 板块链接:
            浏览器对象=spider.浏览器对象
            浏览器对象.get(request.url)
            sleep(1)
            网页内容=浏览器对象.page_source
            response=HtmlResponse(url=request.url,request=request,encoding='utf8',body=网页内容)
            return response
        else:
            return response

4、开启中间件

DOWNLOADER_MIDDLEWARES = {
   "wangyi.middlewares.WangyiDownloaderMiddleware": 543,
}

5、爬虫文件完成最后解析

for u in self.板块链接:
            yield scrapy.Request(url=u,callback=self.详情页解析)
    def 详情页解析(self,response):
        新闻列表=response.xpath('/html/body/div[1]/div[3]/div[3]/div[1]/div[1]/div/ul/li/div/div')
        for i in 新闻列表:
            try:
                标题=i.xpath('./div/div[1]/h3/a/text()').extract_first()
                详情页 = i.xpath('./div/div[1]/h3/a/@href').extract_first()
                item对象=WangyiItem()
                item对象['标题']=标题
                #print(标题, 详情页)
            except Exception as e:
                print("爬虫问题")
            if 详情页!=None:
                yield scrapy.Request(url=详情页,callback=self.新闻内容,meta={'item':item对象})
    def 新闻内容(self,response):
        item=response.meta['item']
        内容=response.xpath('//*[@id="content"]/div[2]//text()').extract()
        内容=''.join(内容).strip()
        item['内容']=内容
        yield item

6、items添加对象

标题 = scrapy.Field()
    内容 = scrapy.Field()

7、管道文件操作

class WangyiPipeline:
    def process_item(self, item, spider):
        print(item)
        return item

8、开启管道

ITEM_PIPELINES = {
   "wangyi.pipelines.WangyiPipeline": 300,
}

9、关闭浏览器对象

def closed(self, reason):
        self.浏览器对象.quit()

10、运行爬虫

scrapy crawl wangyipc

11、部分截图

目录
相关文章
|
2天前
|
数据管理 测试技术
深入理解自动化测试框架:以Selenium为例
【4月更文挑战第30天】 随着软件开发的快速发展,自动化测试已经成为保证软件质量和提升开发效率的重要手段。本文将深入探讨自动化测试框架的核心概念,并以广泛应用的开源工具Selenium为例,解析其架构、原理及在实际项目中的运用。通过实例分析与性能评估,旨在为读者提供一套系统的自动化测试解决方案,并探讨其在复杂应用场景下的优化策略。
|
2天前
|
敏捷开发 前端开发 JavaScript
深入理解自动化测试框架:以Selenium为例
【4月更文挑战第30天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加快市场投放的关键步骤。本文聚焦于流行的自动化测试框架——Selenium,探讨其架构、核心组件以及如何有效地利用Selenium进行Web应用测试。通过分析真实案例,我们将揭示Selenium在实际项目中的应用优势与面临的挑战,并提出优化策略。文章的目的在于帮助测试工程师深入理解Selenium,提升其在复杂项目中的运用效率。
|
2天前
|
前端开发 IDE 数据可视化
深入理解与应用自动化测试框架Selenium的最佳实践
【4月更文挑战第30天】 本文将深入剖析自动化测试框架Selenium的核心原理,并结合最佳实践案例,探讨如何有效提升测试覆盖率和效率。文中不仅涉及Selenium的架构解析,还将提供针对性的策略来优化测试脚本,确保测试流程的稳定性与可靠性。通过实例演示,读者可以掌握如何在不同测试场景中灵活运用Selenium,以及如何处理常见的技术挑战。
|
2天前
|
敏捷开发 监控 前端开发
深入理解与应用自动化测试框架:以Selenium为例
【4月更文挑战第30天】 在软件开发的快速迭代周期中,质量保证(QA)团队面临持续的压力,需确保产品在每次发布时都达到预期的质量标准。为了应对这一挑战,自动化测试成为了关键工具,它不仅提高了测试效率,还确保了测试的一致性和可重复性。本文将探讨自动化测试框架Selenium的核心组件、工作原理及其在实际测试中的应用。通过分析Selenium的优势和面临的常见问题,我们将讨论如何有效地集成Selenium到现有的测试流程中,以及如何克服常见的技术障碍。我们的目标是为读者提供一个清晰的指南,帮助他们理解和利用自动化测试框架来优化他们的软件测试实践。
|
3天前
|
前端开发 JavaScript 测试技术
深入探索自动化测试框架:Selenium与Appium的对比分析
【4月更文挑战第29天】 在快速迭代的软件发展环境中,自动化测试已成为确保软件质量和加速产品上市的关键步骤。本文将重点探讨两种广泛使用的自动化测试框架——Selenium和Appium,通过对比它们的核心特性、适用场景及执行效率,为软件开发和测试团队提供选择指南。文章不仅分析了各自的技术架构和脚本语言支持,还讨论了它们在处理Web应用和移动应用测试时的优缺点,旨在帮助读者根据项目需求做出更加明智的选择。
|
4月前
|
数据采集 存储 数据处理
Scrapy:Python网络爬虫框架的利器
在当今信息时代,网络数据已成为企业和个人获取信息的重要途径。而Python网络爬虫框架Scrapy则成为了网络爬虫工程师的必备工具。本文将介绍Scrapy的概念与实践,以及其在数据采集和处理过程中的应用。
24 1
|
5月前
|
数据采集 调度 Python
Scrapy爬虫中合理使用time.sleep和Request
Scrapy爬虫中合理使用time.sleep和Request
|
5天前
|
数据采集 存储 中间件
【专栏】Scrapy:解锁网络爬虫新境界
【4月更文挑战第27天】Scrapy是Python的高效爬虫框架,以其异步处理、多线程和中间件机制提升爬取效率。它的灵活性体现在可定制化组件、支持多种数据库存储及与Selenium、BeautifulSoup等工具集成。Scrapy易于扩展,允许自定义下载器和解析器。在实践中,涉及项目配置、Spider类编写、数据抓取、存储与分析。面对动态网页和反爬机制,Scrapy可通过Selenium等工具应对,但需注意法规与道德规范。随着技术发展,Scrapy将在网络爬虫领域持续发挥关键作用。
|
10天前
|
数据采集 存储 JSON
Python爬虫面试:requests、BeautifulSoup与Scrapy详解
【4月更文挑战第19天】本文聚焦于Python爬虫面试中的核心库——requests、BeautifulSoup和Scrapy。讲解了它们的常见问题、易错点及应对策略。对于requests,强调了异常处理、代理设置和请求重试;BeautifulSoup部分提到选择器使用、动态内容处理和解析效率优化;而Scrapy则关注项目架构、数据存储和分布式爬虫。通过实例代码,帮助读者深化理解并提升面试表现。
15 0
|
2月前
|
数据采集 Web App开发 搜索推荐
项目配置之道:优化Scrapy参数提升爬虫效率
项目配置之道:优化Scrapy参数提升爬虫效率

热门文章

最新文章