[开源]Python爬虫框架scrapy如何爬取国内各大视频网站视频信息 [欢迎新手一起交流]

因为想做一个 VIP 视频网站 /APP 然后不太想用第三方的资源站或者是程序。

想做一个能够爬取国内各大视频网站的视频信息的爬虫程序。

爬的信息主要是: 标题,导演,主演,简介,类型,年份,VIP/用卷 /收费 /免费,片头时间,片尾时间,图片(横 /竖),地区,评分,集数,是否完结等....

目前我已经做好了一丢丢了。。。腾讯视频可以算是好了(还有一丢丢问题,极少部分视频不能爬取)

如果觉得这个东西可能有用的话 可以点个 star 可能很久以后,会完善

如果你需要一个项目练练手。。。那么,欢迎你来和我一起完善这个项目。。。

项目地址:https://github.com/perfect-network/scrapy_for_video.git


[开源]Python爬虫框架scrapy如何爬取国内各大视频网站视频信息 [欢迎新手一起交流]

8 回复

有点意思,star 一个。


用Scrapy爬视频网站信息,核心是处理动态加载和反爬。直接上干货,一个能跑的例子:

import scrapy
import json
from urllib.parse import urlencode

class VideoSpider(scrapy.Spider):
    name = 'video_spider'
    
    def start_requests(self):
        # 以B站为例,先获取分类列表
        base_url = 'https://api.bilibili.com/x/web-interface/ranking/v2'
        params = {
            'rid': 1,  # 动画区
            'type': 'all',
            'ps': 50   # 每页数量
        }
        yield scrapy.Request(
            f'{base_url}?{urlencode(params)}',
            callback=self.parse_video_list
        )
    
    def parse_video_list(self, response):
        data = json.loads(response.text)
        
        if data['code'] == 0:
            for item in data['data']['list']:
                video_info = {
                    'title': item['title'],
                    'aid': item['aid'],
                    'bvid': item['bvid'],
                    'play': item['stat']['view'],
                    'danmaku': item['stat']['danmaku'],
                    'like': item['stat']['like'],
                    'author': item['owner']['name'],
                    'duration': self._format_duration(item['duration']),
                    'pubdate': item['pubdate']
                }
                
                # 继续获取详细数据
                detail_url = f'https://api.bilibili.com/x/web-interface/view?aid={item["aid"]}'
                yield scrapy.Request(
                    detail_url,
                    callback=self.parse_video_detail,
                    meta={'video_info': video_info}
                )
    
    def parse_video_detail(self, response):
        video_info = response.meta['video_info']
        data = json.loads(response.text)
        
        if data['code'] == 0:
            detail = data['data']
            video_info.update({
                'description': detail['desc'][:200],  # 截取前200字符
                'tags': ','.join([tag['tag_name'] for tag in detail['tags']]),
                'coins': detail['stat']['coin'],
                'favorites': detail['stat']['favorite'],
                'share': detail['stat']['share']
            })
            
            yield video_info
    
    def _format_duration(self, seconds):
        """秒数转时分秒格式"""
        m, s = divmod(seconds, 60)
        h, m = divmod(m, 60)
        return f'{h:02d}:{m:02d}:{s:02d}' if h else f'{m:02d}:{s:02d}'

关键点:

  1. 用API接口比解析HTML更稳定,大部分视频站都有公开API
  2. 请求头要带User-Agent,settings.py里配置:
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
DOWNLOAD_DELAY = 1  # 礼貌爬取
  1. 需要登录才能访问的数据,用scrapy.FormRequest或带上cookies
  2. 异步加载的数据用scrapy-splashselenium处理

新手建议从API入手,避开动态渲染的坑。

关注一波不迷路

没有验证码,IP 反爬虫限制的处理吗?

没有,我只是爬信息而已

而且可以直接去他们这个视频 APP/小程序等客户端里抓包,直接去抓接口。。。腾讯视频里就有两个接口是从腾讯视频小程序里抓到的

楼主 ip 用的哪家的代理

目前还没有用到代理。。。。。可能以后会用到吧

回到顶部