美文网首页
2019-06-16 今日头条西瓜小视频下载

2019-06-16 今日头条西瓜小视频下载

作者: hcc_9bf4 | 来源:发表于2019-06-16 14:37 被阅读0次

    下载今日头条西瓜小视频,新手难度系数×××××
    由于视频一直在持续更新,所以示例的网页图片会不一样

    首页接口URL="https://www.365yg.com"

    image.png
    这个网页所有的链接都是动态加载的,都需要获取API接口再来访问

    第一步获取标题的URL,通过‘查看网页原代码‘发现标题的URL是通过URL+href获得----》如下图href

    image.png

    但是通过python requests‘查看网页原代码’发现找不到关于href的链接,后来通过抓包发现是动态加载过来的,如下图


    image.png

    再看接口的response发现,src在json数据里面


    tu3

    第二步,分析API接口了

    URL: https://www.365yg.com/api/pc/feed/?min_behot_time=0&category=video_new&utm_source=toutiao&widen=1&tadrequire=true&as=A115FD5086E14FD&cp=5D06A114DFBD3E1&_signature=kp.DGBAWz6Y4sIOYnL.AY5Kfww
    这个接口响应的内容就是json内容,其中包含href

    复制response内容,通过json在线解析(https://www.json.cn)查看,很明显在这个json数据里面

    image.png

    研究发现通过widen的 数值变化可以加载出不一样的主题,次数由自己定,次数多加载的视频更多

    for widen in range(1,5):#四次
            #解析首页返回所有的标题连接
            spidder_content(widen)
    
    def spidder_content(widen):
        #首页https://www.365yg.com是通过json动态加载视频链接所以需要通过抓包获取的url,根据widen数值不一样,获取的url不一样
        url='https://www.365yg.com/api/pc/feed/?min_behot_time=0&category=video_new&utm_source=toutiao&widen={}&tadrequire=true&as=A1454DE084FE1AD&cp=5D043E416A5D2E1&_signature=4a4SWhAfvLaYPOPM2JBHReGuEk'
        #url=https://www.365yg.com/api/pc/feed/?max_behot_time=1560602856&category=video_new&utm_source=toutiao&widen=1&tadrequire=true&as=A1E5ED30E46E7F8&cp=5D048EE73FD82E1&_signature=rywnhRAS8jfWvtYTY.0ejq8sJ5
        url_page=url.format(widen)
        r=requests.get(url=url_page,headers=headers)
        # print(r.text)
        #创建json对象
        content=json.loads(r.text)
        # print(content)
        for json_dict in content['data']:
            #获取标题
            title=json_dict['title']
            # print('video_id:',json_dict['video_id'])
            # print('behot_time:',json_dict['behot_time'])
            #获取播放视频的那页url
            json_url= 'https://www.365yg.com' + json_dict['source_url']
            # print('视频链接:',json_url)
            # print('group_id:',json_dict['group_id'])
            #解析url获取视频url
            hand_url(title,json_url)
    

    第三步,找到tittle的URL后再来找视频的URL(这个地方对新手有点难度,对我就有难度....T_T,弄了好久)

    如图进入拼接好了后的URL怎么办?如何获得这个视频链接.....


    image.png

    查看源代码,找不到关于视频的url
    通过审查元素找到视频的url在src中,但是这个src也是动态加载过来的


    image.png

    通过抓包,通过HXR查找json数据都找不到它的URL
    ·······

    最后还是通过headless用谷歌浏览器自动加载才获取到的

    def hand_url(title,json_url):
        #使用headlesschrome来进行解决
        path=r'E:\gugedriver\chromedriver.exe' #注意你的谷歌浏览器驱动路径
        browser = webdriver.Chrome(executable_path=path,chrome_options=chrome_options)#浏览器设置
        browser.get(json_url)
        js='document.body.scrollTop=10000' #浏览器自动下滑加载
        browser.execute_script(js)  #浏览器自动下滑加载
        time.sleep(3)
        
        #获取源码,生成查找video里面的src属性
        tree=etree.HTML(browser.page_source)
        # with open('lalaa.html','w',encoding='utf8') as fp:
        #     fp.write(browser.page_source)
        # exit()
        video_src=tree.xpath('//video[@mediatype="video"]/@src')[0]
        print('%s开始下载.....' % title)
        video=requests.get(video_src,headers=headers)
        #创建文件夹
        dirpath='shipin'
        if not os.path.exists(dirpath):
            os.mkdir(dirpath)
        #创建文件名
        filename=title +'.mp4'
        #创建文件路径
        filepath=os.path.join(dirpath,filename)
        #filepath='shipin/'+title+'.mp4'
        with open(filepath,'wb') as fp:
            fp.write(video.content)
        print('%s结束下载.....' % title)
    

    怎么查看这个src在这个页面里的,可以把上面代码中下面的代码打开本地查看,我已经试过......

    # with open('lalaa.html','w',encoding='utf8') as fp:
        #     fp.write(browser.page_source)
        # exit()
    

    短视频下载过程....(如果想获取更多视频请把widen值取的更大.......)

    E:\Sublime Text 3\day1\111.py:42: DeprecationWarning: use options instead of chrome_options
      browser = webdriver.Chrome(executable_path=path,chrome_options=chrome_options)
    参谋长转业回村,碰上省委书记来了解工作,没想到直接升官当市长开始下载.....
    参谋长转业回村,碰上省委书记来了解工作,没想到直接升官当市长结束下载.....
    最近这首《来自天堂的魔鬼》太好听了!邓紫棋:老娘,不用调音师开始下载.....
    最近这首《来自天堂的魔鬼》太好听了!邓紫棋:老娘,不用调音师结束下载.....
    全自动杀猪,很多人没见过!开始下载.....
    全自动杀猪,很多人没见过!结束下载.....
    女童兴奋给同学发视频,妈妈一看内容吓一跳忙报警,发的啥?开始下载.....
    女童兴奋给同学发视频,妈妈一看内容吓一跳忙报警,发的啥?结束下载.....
    黄瓜只会生吃?教你一种黄瓜新做法,做法简单又好吃开始下载.....
    黄瓜只会生吃?教你一种黄瓜新做法,做法简单又好吃结束下载.....
    释迦牟尼菩提树下成佛,眼镜蛇前来护法,西天第一佛诞生!开始下载.....
    释迦牟尼菩提树下成佛,眼镜蛇前来护法,西天第一佛诞生!结束下载.....
    最绝望的劫匪开始下载.....
    最绝望的劫匪结束下载.....
    [Finished in 167.8s]
    

    本地视频:
    都尝试过点击可播放....

    image.png

    附上完整的python代码:

    import requests #对URL发送请求需要
    import json #解析json数据需要
    import time #响应延时需要
    from lxml import etree 解析短视频网页需要
    from selenium import webdriver  #创建谷歌无头浏览器
    from selenium.webdriver.chrome.options import Options #谷歌无头浏览器设置需要
    import os #创建本地文件需要
    
    #创建谷歌无头浏览器。获取视频连接需要用到
    chrome_options=Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    
    headers={
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
    }
    
    def spidder_content(widen):
        #首页https://www.365yg.com是通过json动态加载视频链接所以需要通过抓包获取的url,根据widen数值不一样,获取的url不一样
        url='https://www.365yg.com/api/pc/feed/?min_behot_time=0&category=video_new&utm_source=toutiao&widen={}&tadrequire=true&as=A1454DE084FE1AD&cp=5D043E416A5D2E1&_signature=4a4SWhAfvLaYPOPM2JBHReGuEk'
        #url=https://www.365yg.com/api/pc/feed/?max_behot_time=1560602856&category=video_new&utm_source=toutiao&widen=1&tadrequire=true&as=A1E5ED30E46E7F8&cp=5D048EE73FD82E1&_signature=rywnhRAS8jfWvtYTY.0ejq8sJ5
        url_page=url.format(widen)
        r=requests.get(url=url_page,headers=headers)
        # print(r.text)
        #创建json对象
        content=json.loads(r.text)
        # print(content)
        for json_dict in content['data']:
            #获取标题
            title=json_dict['title']
            # print('video_id:',json_dict['video_id'])
            # print('behot_time:',json_dict['behot_time'])
            #获取播放视频的那页url
            json_url= 'https://www.365yg.com' + json_dict['source_url']
            # print('视频链接:',json_url)
            # print('group_id:',json_dict['group_id'])
            #解析url获取视频url
            hand_url(title,json_url)
    def hand_url(title,json_url):
        #使用headlesschrome来进行解决
        path=r'E:\gugedriver\chromedriver.exe' #注意你的谷歌浏览器驱动路径
        browser = webdriver.Chrome(executable_path=path,chrome_options=chrome_options)#浏览器设置
        browser.get(json_url)
        js='document.body.scrollTop=10000' #浏览器自动下滑加载
        browser.execute_script(js)  #浏览器自动下滑加载
        time.sleep(3)
        
        #获取源码,生成查找video里面的src属性
        tree=etree.HTML(browser.page_source)
        # with open('lalaa.html','w',encoding='utf8') as fp:
        #     fp.write(browser.page_source)
        # exit()
        video_src=tree.xpath('//video[@mediatype="video"]/@src')[0]
        print('%s开始下载.....' % title)
        video=requests.get(video_src,headers=headers)
        #创建文件夹
        dirpath='shipin'
        if not os.path.exists(dirpath):
            os.mkdir(dirpath)
        #创建文件名
        filename=title +'.mp4'
        #创建文件路径
        filepath=os.path.join(dirpath,filename)
        #filepath='shipin/'+title+'.mp4'
        with open(filepath,'wb') as fp:
            fp.write(video.content)
        print('%s结束下载.....' % title)
    def main():
        for widen in range(1,2):
            #解析首页返回所有的标题连接
            spidder_content(widen)
    
    if __name__ == '__main__':
        main()
    

    相关文章

      网友评论

          本文标题:2019-06-16 今日头条西瓜小视频下载

          本文链接:https://www.haomeiwen.com/subject/fskgfctx.html