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、部分截图

目录
相关文章
|
15天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
59 6
|
1月前
|
数据采集 存储 JavaScript
自动化数据处理:使用Selenium与Excel打造的数据爬取管道
本文介绍了一种使用Selenium和Excel结合代理IP技术从WIPO品牌数据库(branddb.wipo.int)自动化爬取专利信息的方法。通过Selenium模拟用户操作,处理JavaScript动态加载页面,利用代理IP避免IP封禁,确保数据爬取稳定性和隐私性。爬取的数据将存储在Excel中,便于后续分析。此外,文章还详细介绍了Selenium的基本设置、代理IP配置及使用技巧,并探讨了未来可能采用的更多防反爬策略,以提升爬虫效率和稳定性。
|
1月前
|
数据采集 中间件 开发者
Scrapy爬虫框架-自定义中间件
Scrapy爬虫框架-自定义中间件
|
1月前
|
数据采集 中间件 Python
Scrapy爬虫框架-通过Cookies模拟自动登录
Scrapy爬虫框架-通过Cookies模拟自动登录
|
16天前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
39 4
|
1月前
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。
|
1月前
|
数据采集 前端开发 数据处理
Scrapy的Lambda函数用法:简化数据提取与处理的技巧
在现代爬虫开发中,**Scrapy** 是一个广泛使用的高效 Python 框架,适用于大规模数据爬取。本文探讨如何利用 Python 的 **Lambda 函数** 简化 Scrapy 中的数据提取与处理,特别是在微博数据爬取中的应用。通过结合 **代理IP**、**Cookie** 和 **User-Agent** 设置,展示了实际用法,包括代码示例和优化技巧,以提高爬虫的稳定性和效率。使用 Lambda 函数能显著减少代码冗余,提升可读性,有效应对复杂的数据清洗任务。
|
1月前
|
消息中间件 数据采集 数据库
小说爬虫-03 爬取章节的详细内容并保存 将章节URL推送至RabbitMQ Scrapy消费MQ 对数据进行爬取后写入SQLite
小说爬虫-03 爬取章节的详细内容并保存 将章节URL推送至RabbitMQ Scrapy消费MQ 对数据进行爬取后写入SQLite
25 1
|
1月前
|
Web App开发 Java 测试技术
使用selenium+chromedriver+xpath爬取动态加载信息(一)
使用selenium+chromedriver+xpath爬取动态加载信息(一)
|
1月前
|
数据采集 中间件 数据挖掘
Scrapy 爬虫框架(一)
Scrapy 爬虫框架(一)

热门文章

最新文章