• scrapy框架+redis增量式爬虫: 二进制数据下载>下载某短视频网站里面的短视频的项目工程!


    在我上一个博客里面已经做好一个抓取某短视频网站里面,视频信息数据的工程,点击抓取到的短视频播放地址,是可以直接跳转在浏览器打开播放短视频的:

    在此工程基础上,再在spiderName 里面请求到短视频的数据并且对其进行持久化储存(对视频播放地址发起请求) ,就可以实现该博客的标题项目:

    在管道 pipelines.py 里面是无法通过请求视频播放地址对其进行持久化储存的,使用 ImagesPipeline 也不行,(找的资料说使用ImagesPipeline可以对视频、音频下载) 尝试使用 ImagesPipeline 对频播放地址发起请求,但是无法对其进行持久化储存(试跑工程打印已经下载,但是指定保存视频的文件夹是空的) ImagesPipeline 对图片地址发起请求是可以进行持久化储存(指定保存图片的文件夹有图片文件) 【也可能是我现在能力不足,不知道怎样使用ImagesPipeline对视频文件的下载】 所以这个项目的实现是在 spiderName.py 里面,直接对视频播放地址发起请求并且对其进行持久化储存了!

    在 spiderName.py 里面对短视频地址请求并且对其进行持久化储存代码:

    
    import scrapy
    import time,os
    from redis import Redis
    from haokanPro.items import HaokanproItem
    
    
    class HaokanSpider(scrapy.Spider):
        name = 'haokan'
        # allowed_domains = ['www.xxx.com']
        start_urls = ['https://haokan.baidu.com/videoui/api/videorec?tab=shishang&act=pcFeed&pd=pc&num=20&shuaxin_id={}'.format(int(round(time.time()*1000)))]
        url = 'https://haokan.baidu.com/videoui/api/videorec?tab=shishang&act=pcFeed&pd=pc&num=20&shuaxin_id={}'.format(int(round(time.time() * 1000)))
        sun = 0
        conn = Redis(host='127.0.0.1', port=6379)#数据库链接对象
        def parse(self, response):
    
            page_dic = response.json()['data']['response']['videos']
            for dic in page_dic:
    
                video_title = dic['title']
                video_url = dic['play_url']
                source_name = dic['source_name']
                publish_time = dic['publish_time']
                fmlike = dic['fmlike']
                fmplaycnt = dic['fmplaycnt']
    
                trans = video_title.maketrans('/:*?"<?|', '         ')
                video_title = video_title.translate(trans)
                video_title = video_title.replace(' ','') #处理windows系统特殊符号导致无法保存数据文件(保存数据命名出错的问题)
    
                item = HaokanproItem()
                ex = self.conn.sadd('video_url', video_url)
                try:
                    if ex == 1:#记录表去重
                        item['video_name'] = video_title + '.mp4'#设置保存视频的格式
                        item['视频播放内容'] = video_title
                        item['视频url'] = video_url
                        item['视频作者'] = source_name
                        # item['视频上传时间'] = publish_time
                        # item['点赞数量'] = fmlike
                        # item['视频播放次数'] = fmplaycnt
                        print('正在下载< {} >'.format(item['视频作者']),'的视频< {} > ...'.format(item['视频播放内容']))
                        yield scrapy.Request(url=item['视频url'], callback=self.parse_model,meta={'item': item})#对短视频地址请求、请求传参item
                except:#处理请求异常报错
                    pass
    
    
    
            if self.sun < 11:
                new_url = self.url
                self.sun += 1
                yield scrapy.Request(url=new_url, callback=self.parse)
    
    
        def parse_model(self,response):
    
            item = response.meta['item']
            fileName = os.path.join('video',item['video_name'])
            with open(fileName,'wb') as fp:#保存视频数据的文件夹和保存短视频数据的命名
                fp.write(response.body)
                print('视频: {} 下载完成!'.format(item['视频播放内容']))
    

    ok 下面是跑该工程的效果图:

    本文可以借鉴学习,切勿照搬,根据自己的实际情况实现项目!!!

  • 相关阅读:
    MySQL使用小记
    简单使用grunt、bower工具合并压缩js和css
    python爬虫scrapy命令工具学习之篇三
    python爬虫scrapy学习之篇二
    Maven简单的配置Junit测试及使用简单的mock
    mysql循环查询树状数据
    centos 升级python26到python27
    java基础之十一:方法重写
    java基础知识之十:final关键字
    java基础知识之九:继承
  • 原文地址:https://www.cnblogs.com/YYQ-4414/p/14439141.html
Copyright © 2020-2023  润新知