Python爬虫:爬取知乎上的视频,并把下载链接保存到md文件中

Posted il_持之以恒_li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python爬虫:爬取知乎上的视频,并把下载链接保存到md文件中相关的知识,希望对你有一定的参考价值。

Python爬虫:爬取知乎上的视频,并把下载链接保存到md文件中

1.需要的Python模块


主要是requests模块,用于得到的网页的数据
安装命令为:pip install requests

2.具体实现过程

以爬取王者荣耀这个知乎站点上的视频为例。
我们首先来到王者荣耀官方知乎站点,点击视频,此时网址链接为:
https://www.zhihu.com/org/wang-zhe-rong-yao-74-54/zvideos
一直往下滑,发现下面有页数,点击来到第二页,此时网址链接为:
https://www.zhihu.com/org/wang-zhe-rong-yao-74-54/zvideos?page=2
因此第一页的网址链接应该为:
https://www.zhihu.com/org/wang-zhe-rong-yao-74-54/zvideos?page=1
此时选择这个网址,然后按电脑键盘F12键,来到开发者模式,点击network下面的xhr

可以发现,网页上的数据就在这个json数据里面,这个网址为:
https://www.zhihu.com/api/v4/members/wang-zhe-rong-yao-74-54/zvideos?offset=0&limit=20
通过不断换页发现,第2页的网页数据对应的接送网址为:
https://www.zhihu.com/api/v4/members/wang-zhe-rong-yao-74-54/zvideos?offset=20&limit=20
可以知道liimit应该是指视频的个数,而offset应该是页数,只不过页数应该是进行了一下除了罢了。
继续对这个json数据进行分析,发现这个下面有视频的下载链接:


那么怎样获取上述的那个json网址呢?其实就是字符串的拼接吧!
我们输入的网址为:https://www.zhihu.com/org/wang-zhe-rong-yao-74-54/zvideos?page=1
而这个json网址为:https://www.zhihu.com/api/v4/members/wang-zhe-rong-yao-74-54/zvideos?offset=0&limit=20
只需字符串的拼接即可。

3.参考代码和运行结果


参考代码为:

import requests
from crawlers.userAgent import useragent
import re
import json
import time


video_url=input("请输入视频界面的网址:")
userAgent=useragent()
headers={'user-agent':userAgent.getUserAgent()}
response=requests.get(url=video_url,headers=headers)
content=response.text  # 网址的字符串
videos=int(re.findall('视频<span class="Tabs-meta">(\\d+)</span>',content)[0]) # 总共的视频数量
print('总共视频个数为',videos)
page=0 # 页数
if videos%20==0:
    page=videos//20
else:
    page=videos//20+1

def formatStr(string:str):
    string=string.replace('\\n','')
    strLength=len(string.strip())
    if strLength==0:
        return '空'
    num=strLength//35+1
    str1=''
    for i in range(num):
        str1+=string[i*35:(i+1)*35]+'\\n'

    return str1

print('总共页数为:',page)
# ajax_url='https://www.zhihu.com/api/v4/members/wang-zhe-rong-yao-74-54/zvideos?offset=0&limit=20'
ajaxUrl='https://www.zhihu.com/api/v4/members/'+video_url[video_url.find('/org/')+5:video_url.rfind('?')+1]+'offset={}&limit=20'  # 拼接字符串
# 构造ajax构造的网址

file=input('请输入需要创建文件名称:')
filePath='./{}.md'.format(file)

f=open(file=filePath,mode='a',encoding='utf=8')
for i in range(page):
    print('=======第{}页'.format(i+1))
    ajaxUrl=ajaxUrl.format(i*20)
    response1=requests.get(url=ajaxUrl,headers=headers)
    dict1=json.loads(response1.text)
    list1=dict1['data']
    for list2 in list1:
        title=list2['title']
        descript1=list2['description']
        print('-------【{}】--------'.format(title))
        print('--->【描述】:%s'%formatStr(descript1))
        f.write('## {}\\n'.format(title))
        f.write('<font face="华文新魏" size=4 color=red>{}</font>\\n'.format(descript1.replace('\\n','')))
        downloadUrl=list2['video']['playlist']
        print('-------视频大小有:')
        for key in downloadUrl.keys():
            downUrl=downloadUrl[key]['play_url']
            print('{0}--width:{1},height:{2},下载链接为:[{3}]({3})'.format(key,downloadUrl[key]['width'],downloadUrl[key]['height'],downUrl))
            f.write('<font face="华文新魏" size=4 color=blue>{},下载链接为:{}</font><br>'.format(key,downUrl))
        f.write('============================================\\n')
        print('-='*40)
    time.sleep(2)
f.close()

运行结果:

Python爬虫下载知乎上的视频

运行完成之后,会在运行文件的同一个文件夹下面多了一个md文件,视频的下载存储在这个文件里面,例外,小编在代码中导入了一个模块,那是小编自定义的,不了解的读者可以看看小编的这篇文章,文章链接为:Python爬虫:制作一个属于自己的IP代理模块

4.总结

因为有些视频很大,所以小编没有下载,知识输出视频的下载链接,另外,有的站点上的视频个数很多,小编不是不能把它们下载下来,而是觉得作为一个文明的爬虫,不能把相应的服务器造成很大的负担。小编正在参与CSDN新星计划,如果读者觉得小编的这篇文章还不错的话,记得点赞,同时如果有什么问题和建议,欢迎到评论区留言!

以上是关于Python爬虫:爬取知乎上的视频,并把下载链接保存到md文件中的主要内容,如果未能解决你的问题,请参考以下文章

如何使用python爬取知乎数据并做简单分析

Python爬取知乎与我所理解的爬虫与反爬虫

基于webmagic的爬虫小应用--爬取知乎用户信息

Python爬虫实战,Scrapy实战,爬取知乎表情包

python爬取知乎首页问题

python scrapy简单爬虫记录(实现简单爬取知乎)