玩王者技术太菜,或许读者可以看看小编的这篇文章

59 篇文章 68 订阅

原标题:运用Python爬虫下载王者荣耀英雄讲解视频

前言:

王者官网上的英雄讲解视频的确不错,但是不知道读者知不知道这个玩意啊!但愿知道吧!不过,即使不知道,看了小编的这篇文章也就知道了,注意:部分视频用小编的那个代码无法下载,希望大家谅解!

在这里插入图片描述

1.完成这个需要的Python模块和.exe文件

需要的Python模块有selenium、requests、lxml、json、os。
讲到selenium,小编想就必须提到一个.exe文件,我用的是谷歌浏览器,即为chromedriver.exe,这个下载就不讲解了,不懂得读者可以看看小编得这篇文章,python下载网易云音乐,这篇文章里面小编讲到了这个.exe文件具体下载。

2.怎样得到视频的下载链接

视频的下载链接怎样得到呢?
在这里插入图片描述
也就是运用上面提到的那个selenium模块,我们来到这个界面,
在这里插入图片描述

网页为:https://pvp.qq.com/v/detail.shtml?G_Biz=18&tid=643431,按电脑键盘的F12键,可以发现这个下面有这个视频的下载链接,显然这个下载链接是动态加载的,所以要用到selenium模块。
在这里插入图片描述
怎样提取这个视频下载链接呢?当然是用xpath语法呐!
在这里插入图片描述
参考代码如下:

from selenium import webdriver

url='https://pvp.qq.com/v/detail.shtml?G_Biz=18&tid=643431'
driver=webdriver.Chrome()
driver.get(url=url)
driver.implicitly_wait(30)
print(driver.find_elements_by_xpath('.//txpdiv[@class="txp_video_container"]/video')[0].get_attribute('src'))
driver.close()

运行完成后,可以在运行结果中发现如下结果:
在这里插入图片描述
这就是这个视频的下载链接,点击进去就知道了。
在这里插入图片描述

3.完整实现整个操作

怎样根据自己的需要选择自己想了解的英雄呢?本来我是想爬取所有英雄链接和名字的,这个网址为:https://pvp.qq.com/web201605/herolist.shtml
在这里插入图片描述

但是,有了一个问题,那名字不知道是被加密了,还是怎的,运行结果是这样的。
代码为:

from lxml import etree
import requests

url='https://pvp.qq.com/web201605/herolist.shtml'
headers={
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3756.400 QQBrowser/10.5.4039.400'}
response=requests.get(url=url,headers=headers)
html=etree.HTML(response.text)
L2=html.xpath('.//ul[@class="herolist clearfix"]/li/a')
for i in range(len(L2)):
    print(L2[i].xpath('./text()'))

在这里插入图片描述
后面发现network下面的xhr里面有一个网址是这个的,虽然看到的和这个运行结果一样,但是用代码加载一下,就是原来的那个效果了。
在这里插入图片描述
代码运行结果:
在这里插入图片描述
代码为:

import requests
import json

url='https://pvp.qq.com/web201605/js/herolist.json'
headers={
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3756.400 QQBrowser/10.5.4039.400'}
response=requests.get(url=url,headers=headers)
dict2=json.loads(response.text)
print(dict2)

现在,英雄的名字我们得到了,那么这个链接怎样得到呢?其实在这个json文件中,那个链接也已经得到了,只不过需要字符串拼接一下。
拼接成功后的这个网址,点击进去,就是这样
在这里插入图片描述
现在需要做的就是来到观看视频的界面,也就是点击上图中这个播放视频的符号,来到另外一个界面。
在这里插入图片描述
之后的操作就是第二个标题那里讲到的,小编就不一一讲解了。

4.运行结果视频和参考代码

运行结果:

运用Python爬虫下载王者荣耀英雄讲解视频

参考代码如下:

from selenium import webdriver
from lxml import etree
import requests
import json
import os


class wangZhe(object):
    def __init__(self):
        self.headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36'}
        self.url1 = 'https://pvp.qq.com/web201605/js/herolist.json'  # 网址一,存储英雄列表信息
        self.url2='https://pvp.qq.com/web201605/herodetail/%d.shtml'  # 网址二
    
    def getNames(self): # 定义一个方法,用于提取网址一中的英雄相关信息的数据
        response = requests.get(url=self.url1, headers=self.headers)
        str1 = response.text
        L2 = json.loads(str1)   # 列表类型
        for i in range(len(L2)):
            print('{}----{}'.format(i+1, L2[i]['cname']), end='\t\t')
            if (i+1) % 4 == 0:
                print()
        id=input('请输入想看的视频序号(具体格式为  1,2,5): ')
        id=id.split(',')
        id=[int(i) for i in id]
        L3=[[L2[i-1]['ename'] for i in id],[L2[i-1]['cname'] for i in id]]

        return L3
    
    def getInfo(self):
        L2=self.getNames()
        L3=L2[0]
        L4=list()
        for i in range(len(L3)):
            response=requests.get(url=self.url2%(L3[i]),headers=self.headers)
            html=etree.HTML(response.text)
            L4.append(html.xpath('.//a[@class="hero-video"]/@href')[0])
        
        L5=[L4,L2[1]]
        
        return L5
    
    def mkDir(self):  # 创建文件夹
        xpath=input('请输入创建文件夹的路径:')
        try:
            os.mkdir(xpath)
        except Exception as e:
            print('错误原因:{}'.format(e))
        return xpath
    
    def writeDir(self,file,url):  # 写入文件
        response=requests.get(url=url,headers=self.headers)
        with open(file=file,mode='wb') as f:
            f.write(response.content)
            

    def downloadVideo(self):
        L4=self.getInfo()
        L5=L4[0]
        url='https:%s'%(L5[0])
        driver=webdriver.Chrome()
        driver.get(url=url)
        driver.implicitly_wait(30)
        L6=list()
        for i in range(1,len(L5)):
            url='https:%s'%(L5[i])
            driver2=webdriver.Chrome()
            driver2.get(url)
            downUrl=driver.find_elements_by_xpath('.//txpdiv[@class="txp_video_container"]/video')[0].get_attribute('src')
            L6.append(downUrl)
            driver.implicitly_wait(30)                        
            driver.close()
            driver=driver2

        downUrl=driver.find_elements_by_xpath('.//txpdiv[@class="txp_video_container"]/video')[0].get_attribute('src')
        L6.append(downUrl)
        driver.close()
        
        # 下面是写入文件操作
        path=self.mkDir()
        L7=L4[1]
        for i in range(len(L6)):
            if 'mp4' not in L6[i]:
                print('{}.mp4暂不支持下载!'.format(L7[i]))
            else:
                self.writeDir(file=path+'./{}.mp4'.format(L7[i]),url=L6[i])
                print('{}.mp4下载成功!'.format(L7[i]))
    
if __name__ == "__main__":
    a=wangZhe()
    a.downloadVideo()
5.总结

这个程序还有一些不足,比如很少用try 和except ,也许有个时候就报错了,另外,也没有用到ip代理,如果有读者觉得小编的这篇文章还不错的话!记得点赞喔!

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
【为什么学爬虫?】        1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!        2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是:网络请求:模拟浏览器的行为从网上抓取数据。数据解析:将请求下来的数据进行过滤,提取我们想要的数据。数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是:爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求!【课程服务】 专属付费社群+定期答疑

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坚持不懈的大白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值