当前位置:   article > 正文

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

scrapy 动态爬取

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

三、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):

define the fields for your item here like:

name = scrapy.Field()

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中编辑

-- coding: utf-8 --

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 学习路线规划

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

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

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/1012345
推荐阅读
相关标签
  

闽ICP备14008679号