scrapy 爬取视频
利用FilesPipeline 下载视频
1.setting.py
# 保存log信息的文件名 LOG_LEVEL = "INFO" # LOG_STDOUT = True # LOG_ENCODING = 'utf-8' # # 路径 os.path.dirname(os.path.dirname(os.path.dirname(__file__))) # LOG_FILE = "info.log" # 下载延迟 import random DOWNLOAD_DELAY = random.random() + random.random() RANDOMIZE_DOWNLOAD_DELAY = True # Crawl responsibly by identifying yourself (and your website) on the user-agent USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36' # 视频下载路径 import os BASE_DIR = os.path.dirname((os.path.abspath(__file__))) MEDIA_ALLOW_REDIRECTS = True FILES_STORE = os.path.join(BASE_DIR, "videos") # 文件保存路径 FILES_URLS_FIELD = 'file_urls' # 这里对应着item.py文件中的字段 FILES_RESULT_FIELD = 'files' # 同样对应item.py文件中的字段 # 120 days of delay for files expiration # FILES_EXPIRES = 120 # 设置文件失效时间 ITEM_PIPELINES = { 'steam_video.pipelines.SteamVideoPipeline': 300, 'steam_video.pipelines.SteamDownLoadPipeline': 100, # 视频下载的管道 }
2.spider.py
import scrapy, pymysql, re class VideosSpider(scrapy.Spider): name = 'videos' allowed_domains = ['.com'] start_urls = ['https://www.baidu.com/'] def parse(self, response): db = pymysql.connect(host='localhost', port=3306, database='game', user='root', password='root', charset='utf8', autocommit=True) cursor = db.cursor() cursor.execute( 'SELECT id, appid, data_webm_source, data_webm_hd_source, data_mp4_source, data_mp4_hd_source, data_poster from steam_game_video WHERE id<5') # 获取图片url for appid in cursor.fetchall(): for i in range(2, 7): item = {} item['id'] = appid[0] item['appid'] = appid[1] item['file_url'] = appid[i] # 下载视频的url 前面要自己获取到 视频的url 可以自己爬 item['video_name'] = str(item['appid']) + '_' + re.findall(r'/(\d+)/', appid[i])[0] + '_' + \ appid[i].split('/')[-1].split('?')[0] # 后面图片要命名的名称 print(item) print('*' * 100) yield item
3.pipelines.py
# -*- coding: utf-8 -*- from scrapy.pipelines.images import FilesPipeline # 导入文件下载类 import scrapy, os, hashlib from scrapy.http import Request from scrapy.utils.python import to_bytes from steam_video.settings import FILES_STORE as FILS class SteamVideoPipeline(object): def process_item(self, item, spider): return item # 下载图片管道 class SteamDownLoadPipeline(FilesPipeline): def get_media_requests(self, item, info): return scrapy.Request(item['file_url'], meta={'video_name': item.get('video_name', None)}) # 下载视频 video_name为视频名称 def file_path(self, request, response=None, info=None): def _warn(): from scrapy.exceptions import ScrapyDeprecationWarning import warnings warnings.warn('FilesPipeline.file_key(url) method is deprecated, please use ' 'file_path(request, response=None, info=None) instead', category=ScrapyDeprecationWarning, stacklevel=1) # check if called from file_key with url as first argument if not isinstance(request, Request): _warn() url = request else: url = request.url # detect if file_key() method has been overridden if not hasattr(self.file_key, '_base'): _warn() return self.file_key(url) media_guid = hashlib.sha1(to_bytes(url)).hexdigest() # change to request.url after deprecation media_ext = os.path.splitext(url)[1] # change to request.url after deprecation # 这里我们使用自定义的文件名,如果meta中没有video_name,就使用url的hash值作为文件名 file_path = FILS + '\\' + request.meta.get('video_name') file = file_path.replace('\\{}'.format(file_path.split('\\')[-1]), '') if not os.path.exists(file): os.makedirs(file) return '{}'.format(request.meta.get('video_name')) # return 'full/%s.mp4' % (''.join(request.meta.get('video_name', media_guid).split(' '))) def file_key(self, url): # 服务器部署需要家里这个代码 return self.file_path(url) file_key._base = True def item_completed(self, results, item, info): print('******the results is********:', results) # resulte [(True, {'url': 'https://media.st.dl.bscstorage.net/steam/apps/904/movie480.mp4?t=1569623096', 'path': '220_904_movie480.mp4', 'checksum': '0f22435cdfe2d605480fc5396160d3a5'})] if results[0][0]: # 判断视频是否下载成功 print('下载成功:{}'.format(item)) else: print('下载失败:{}'.format(item))
scrapy 爬取视频的更多相关文章
- Scrapy爬取美女图片 (原创)
有半个月没有更新了,最近确实有点忙.先是华为的比赛,接着实验室又有项目,然后又学习了一些新的知识,所以没有更新文章.为了表达我的歉意,我给大家来一波福利... 今天咱们说的是爬虫框架.之前我使用pyt ...
- 以豌豆荚为例,用 Scrapy 爬取分类多级页面
本文转载自以下网站:以豌豆荚为例,用 Scrapy 爬取分类多级页面 https://www.makcyun.top/web_scraping_withpython17.html 需要学习的地方: 1 ...
- 【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神
原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http:/ ...
- scrapy爬取西刺网站ip
# scrapy爬取西刺网站ip # -*- coding: utf-8 -*- import scrapy from xici.items import XiciItem class Xicispi ...
- scrapy爬取豆瓣电影top250
# -*- coding: utf-8 -*- # scrapy爬取豆瓣电影top250 import scrapy from douban.items import DoubanItem class ...
- scrapy爬取极客学院全部课程
# -*- coding: utf-8 -*- # scrapy爬取极客学院全部课程 import scrapy from pyquery import PyQuery as pq from jike ...
- scrapy爬取全部知乎用户信息
# -*- coding: utf-8 -*- # scrapy爬取全部知乎用户信息 # 1:是否遵守robbots_txt协议改为False # 2: 加入爬取所需的headers: user-ag ...
- Scrapy爬取Ajax(异步加载)网页实例——简书付费连载
这两天学习了Scrapy爬虫框架的基本使用,练习的例子爬取的都是传统的直接加载完网页的内容,就想试试爬取用Ajax技术加载的网页. 这里以简书里的优选连载网页为例分享一下我的爬取过程. 网址为: ht ...
- Scrapy爬取静态页面
Scrapy爬取静态页面 安装Scrapy框架: Scrapy是python下一个非常有用的一个爬虫框架 Pycharm下: 搜索Scrapy库添加进项目即可 终端下: #python2 sudo p ...
随机推荐
- linux驱动——cmdline原理及利用【转】
转自:https://blog.csdn.net/qingzhuyuxian/article/details/82895416 最近安卓项目中想要获取内核cmdline特定的启动参数,因为我们在他的U ...
- Spring Cloud中五大神兽总结(Eureka/Ribbon/Feign/Hystrix/zuul)
Spring Cloud中五大神兽总结(Eureka/Ribbon/Feign/Hystrix/zuul) 1.Eureka Eureka是Netflix的一个子模块,也是核心模块之一.Eureka是 ...
- python 1 默写用递归实现无限极分类 2 默写用树实现无限极分类
data=[ {"cat_id":3,"name":"沙河","parent_id":1}, {"cat_id ...
- 201871010136-赵艳强《面向对象程序设计(java)》第一周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/ ...
- expect实现非交互下的ssh连接, expect简单使用整理
1. shell中使用ssh远程连接服务器做一些事情通常需要交互输入些信息, 可使用expect语句解决: 2. expect中设置变量语法: set name xxx set age xxx ...
- Windows下同时安装python2和python3如何兼容版本
引言:因学习需要把python2和python3都安装了,为了避免使用过程中混淆版本在网上找了一些解决方案,亲测可用.方法如下: 分别下载并安装Python2.x和Python3.x. 配置环境变量. ...
- IDEA创建maven项目慢的不行
方法二 下载archetype-catalog.xml文件,在maven的VM Options加上-DarchetypeCatalog=local 默认情况下,创建maven项目是从网络下载catal ...
- Centos7 下cobbler安装及配置
1.背景介绍 作为运维,在公司经常遇到一些机械性重复工作要做,例如:为新机器装系统,一台两台机器装系统,可以用光盘.U盘等介质安装,1小时也完成了,但是如果有成百台的服务器还要用光盘.U盘去安装,就显 ...
- 【zabbix告警配置】zabbix服务配置邮件告警
一.安装邮件服务 在zabbix_server服务端安装邮件和邮件发送服务,这里可以参考我另一篇邮件服务部署文章:https://www.cnblogs.com/HeiDi-BoKe/p/118833 ...
- webUploader的使用
webUploader的使用记录 WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML ...