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

目录
相关文章
|
3月前
|
Web App开发 存储 前端开发
Python+Selenium自动化爬取携程动态加载游记
Python+Selenium自动化爬取携程动态加载游记
|
7月前
|
数据采集 存储 数据可视化
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
616 0
分布式爬虫框架Scrapy-Redis实战指南
|
6月前
|
数据采集 前端开发 JavaScript
Scrapy结合Selenium实现搜索点击爬虫的最佳实践
Scrapy结合Selenium实现搜索点击爬虫的最佳实践
|
5月前
|
数据采集 存储 NoSQL
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
317 67
|
5月前
|
数据采集 存储 监控
Scrapy框架下地图爬虫的进度监控与优化策略
Scrapy框架下地图爬虫的进度监控与优化策略
|
11月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
437 6
|
12月前
|
数据采集 存储 JavaScript
自动化数据处理:使用Selenium与Excel打造的数据爬取管道
本文介绍了一种使用Selenium和Excel结合代理IP技术从WIPO品牌数据库(branddb.wipo.int)自动化爬取专利信息的方法。通过Selenium模拟用户操作,处理JavaScript动态加载页面,利用代理IP避免IP封禁,确保数据爬取稳定性和隐私性。爬取的数据将存储在Excel中,便于后续分析。此外,文章还详细介绍了Selenium的基本设置、代理IP配置及使用技巧,并探讨了未来可能采用的更多防反爬策略,以提升爬虫效率和稳定性。
627 4
|
8月前
|
算法 机器人 Python
使用Selenium和ChromeDriver模拟用户操作:从表单填写到数据提交
简介:工程师小王和产品经理莉莉面临无人机市场调研投票数据获取难题,传统方法屡遭封禁。小王通过构建“隐身特工”装备——代理IP、随机UserAgent及有效Cookie,结合Python与Selenium技术,成功绕过问卷星的防刷票系统,实现自动化投票。最终,他们获得了看似真人投票的数据,展示了技术攻防的艺术。这段故事不仅是一场技术较量,更是对算法规则游戏的深刻思考。
164 2
使用Selenium和ChromeDriver模拟用户操作:从表单填写到数据提交
|
12月前
|
数据采集 中间件 Python
Scrapy爬虫框架-通过Cookies模拟自动登录
Scrapy爬虫框架-通过Cookies模拟自动登录
360 0
|
10月前
|
数据采集 Web App开发 JavaScript
如何使用Selenium处理JavaScript动态加载的内容?
如何使用Selenium处理JavaScript动态加载的内容?