2024年Python爬虫实战:利用scrapy,短短50行代码下载整站短视频

   日期:2024-12-27    作者:xaeqm 移动:http://3jjewl.riyuangf.com/mobile/quote/65138.html

参考官方文档,不再赘述。官方文档:https://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/install.html

2024年Python爬虫实战:利用scrapy,短短50行代码下载整站短视频

三、scrapy实战:50行代码爬取全站短视频

python的优雅之处在于能够让开发者专注于业务逻辑,花更少的时间在枯燥的代码编写调试上。scrapy无疑完美诠释了这一精神。

开发爬虫的一般步骤是

  • 确定要爬取的数据(item

  • 找到数据所在页面的url

  • 找到页面间的链接关系,确定如何跟踪(follow)页面

  • 那么,我们一步一步来。

既然是使用scrapy框架,我们先创建项目

1 scrapy startproject DFVideo

紧接着,我们创建一个爬虫

scrapy genspider -t crawl DfVideoSpider eastday.com

这是我们发现在当前目录下已经自动生成了一个目录:DFVideo

目录下包括如图文件

spiders文件夹下,自动生成了名为DfVideoSpider.py的文件。

爬虫项目创建之后,我们来确定需要爬取的数据。在items.py中编辑

import scrapy

class DfvideoItem(scrapy.Item):

video_url = scrapy.Field()#视频源url

video_title = scrapy.Field()#视频标题

video_local_path = scrapy.Field()#视频本地存储路径

接下来,我们需要确定视频源的url,这是很关键的一步。

现在许多的视频播放页面是把视频链接隐藏起来的,这就使得大家无法通过右键另存为,防止了视频别随意下载。

但是只要视频在页面上播放了,那么必然是要和视频源产生数据交互的,所以只要稍微抓下包就能够发现玄机。

这里我们使用fiddler抓包分析。

发现其视频播放页的链接类似于:video.eastday.com/a/180926221513827264568.html?index3lbt

视频源的数据链接类似于:mvpc.eastday.com/vyule/20180415/20180415213714776507147_1_06400360.mp4

有了这两个链接,工作就完成了大半

在DfVideoSpider.py中编辑

import scrapy

from scrapy.loader import ItemLoader

from scrapy.loader.processors import MapCompose,Join

from DFVideo.items import DfvideoItem

from scrapy.linkextractors import LinkExtractor

from scrapy.spiders import CrawlSpider, Rule

import time

from os import path

import os

class DfvideospiderSpider(CrawlSpider):

name = ‘DfVideoSpider’

allowed_domains = [‘eastday.com’]

start_urls = [‘http://video.eastday.com/’]

rules = (

Rule(LinkExtractor(allow=r’video.eastday.com/a/d+.html’),

callback=‘parse_item’, follow=True),

)

def parse_item(self, response):

item = DfvideoItem()

try:

item[“video_url”] = response.xpath(‘//input[@id=“mp4Source”]/@value’).extract()[0]

item[“video_title”] = response.xpath(‘//meta[@name=“description”]/@content’).extract()[0]

#print(item)

item[“video_url”] = ‘http:’ + item[‘video_url’]

yield scrapy.Request(url=item[‘video_url’], meta=item, callback=self.parse_video)

except:

pass

def parse_video(self, response):

i = response.meta

file_name = Join()([i[‘video_title’], ‘.mp4’])

base_dir = path.join(path.curdir, ‘VideoDownload’)

video_local_path = path.join(base_dir, file_name.replace(‘?’, ‘’))

i[‘video_local_path’] = video_local_path

if not os.path.exists(base_dir):

os.mkdir(base_dir)

with open(video_local_path, “wb”) as f:

f.write(response.body)

yield i

至此,一个简单但强大的爬虫便完成了。

如果你希望将视频的附加数据保存在数据库,可以在pipeline.py中进行相应的操作,比如存入mongodb中

最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码,过几天我还会做个视频教程出来,有需要也可以领取~

给大家准备的学习资料包括但不限于

Python 环境、pycharm编辑器/永久激活/翻译插件

python 零基础视频教程

Python 界面开发实战教程

Python 爬虫实战教程

Python 数据分析实战教程

python 游戏开发实战教程

Python 电子书100本

Python 学习路线规划

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号