zoukankan      html  css  js  c++  java
  • Twitter视频下载方式

    本文是传入Twitter视频播放链接通过http://twdown.net/网站获得Twitter视频的MP3,MP4下载链接用YouTube-dl下载Twitter视频

    #coding=utf-8
    import os
    import re
    import sys
    import time
    import datetime
    import requests
    # import pdfkit
    import hashlib
    from scrapy.http import Request, HtmlResponse
    from scrapy.selector import HtmlXPathSelector
    from pymongo import MongoClient
    import smtplib
    import urlparse
    import json
    import redis

    from gevent.pool import Pool
    from gevent import monkey
    monkey.patch_all()

    reload(sys)
    sys.setdefaultencoding('utf-8')

    def get_url(data):
           proxies={'https':'127.0.0.1:8123'}
           url = 'http://twdown.net/download.php/'
           print data
           # data = {
           # 'URL':'https://twitter.com/ciamemewarfare/status/839957301981220864'
           # }
           headers={
           'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
           'Accept-Encoding':'gzip, deflate',
           'Accept-Language':'zh-CN,zh;q=0.8',
           'Cache-Control':'max-age=0',
           'Content-Length':'73',
           'Content-Type':'application/x-www-form-urlencoded',
            # 'Cookie':'__cfduid=d5949cf9b7f7659555bf30bd1176139981497940317; td_cookie=18446744071807429655; _ga=GA1.2.2022387890.1497940226;     _gid=GA1.2.1592134325.1497940226; _gat=1',
            # 'Cookie':'__cfduid=d31e200302b2de7c45238b596be124e011497948038; td_cookie=18446744071812537626; _ga=GA1.2.347564219.1497947962; _gid=GA1.2.1008045576.1497947962; _gat=1',
            # 'Cookie':'__cfduid=d31e200302b2de7c45238b596be124e011497948038; td_cookie=18446744071812537626; _ga=GA1.2.347564219.1497947962; _gid=GA1.2.1008045576.1497947962; _gat=1',
            # 'Cookie':'__cfduid=d5949cf9b7f7659555bf30bd1176139981497940317; td_cookie=18446744071809053771; _ga=GA1.2.2022387890.1497940226; _gid=GA1.2.1592134325.1497940226; _gat=1',
            'Cookie':'__cfduid=d5949cf9b7f7659555bf30bd1176139981497940317; td_cookie=18446744071819015387; _ga=GA1.2.2022387890.1497940226; _gid=GA1.2.1592134325.1497940226',
            'Host':'twdown.net',
            'Origin':'http://twdown.net',
            'Proxy-Connection':'keep-alive',
            'Referer':'http://twdown.net/',
            'Upgrade-Insecure-Requests':'1',
            'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
            }

            try_count = 10
            hxs = None
            while try_count:
                    print try_count
                    try:
                    #html = requests.get(url,headers=headers,proxies=proxies,verify=False).content
                    html = requests.post(url,headers=headers,proxies=proxies,data=data).content
                    response = HtmlResponse(url=url, body=html,encoding = 'utf-8')
                    # print response
                    hxs = HtmlXPathSelector(response)
                    break
            except Exception as e:
                    print e
                    time.sleep(2)
                    print try_count
                    try_count -= 1
                    return hxs,html
                    pass

    def get_download_url(p):# 通过http://twdown.net/,这个网站获得Twitter视频的MP3,MP4下载链接
                    link = 'http://twdown.net/'
                    temp = db_client.alex_movie.alex_movie_bytwitter.find_one({'_id':p})
                    title = temp['title']
                    url = temp['url']#链接
                    alex_id = temp['_id']
                    data = {}
                    data['URL'] = url
                    hxs,html = get_url(data)
                    # print html
                    mp4 = ''
                    mp3 = ''
                    download_list = hxs.select('//div[@class="col-md-8"]/table[@class="table table-condensed table-hover table-striped"]/tbody/tr')
                    for d_l in download_list:
                             d_l_td_a = d_l.select('./td/a')
                             for td_a in d_l_td_a:
                                       td_a_href = ''.join(td_a.select('./@href').extract()).strip()
                                       if '.mp4' in td_a_href:
                                                td_a_mp4 = td_a_href
                                                mp4 = td_a_mp4
                                                print td_a_mp4
                                                pass
                                       if 'mp3.' in td_a_href:
                                                td_a_mp3 = urlparse.urljoin(link,td_a_href)
                                                mp3 = td_a_mp3
                                                print td_a_mp3
                                                pass
                                       pass
                              pass
                    if not mp4 == '':
                            db_client.alex_movie.alex_movie_bytwitter.update({'_id':temp['_id']},{'$set':{'mp4_url':mp4,'is_download':True}})
                            pass
                    if not mp3 == '':
                            db_client.alex_movie.alex_movie_bytwitter.update({'_id':temp['_id']},{'$set':{'mp3_url':mp3,'is_download':True}})
                            pass
                    pass

    def download(p): # 用YouTube-dl下载视频实体
          movie_site = '/mnt/parastor/data/downdata/videos/usatoday_mp4/'
          temp = db_client.alex_movie.alex_movie_bytwitter.find_one({'_id':p})
          title = temp['title']#
          url = temp['url']#链接
          alex_id = temp['_id']
          video_path = os.path.join(movie_site,'%s.mp4'%alex_id.encode('utf-8'))
          try:
              re_num = 10
              while re_num:
                     # youtube-dl --proxy socks5://127.0.0.1:1080 https://www.youtube.com/watch?v=lokN6d1GaK4
                     youtube_content = 'youtube-dl --proxy socks5://127.0.0.1:1080 -i --no-check-certificate -o "%s" -R 20 "%s"'%(video_path,url)
                     # youtube_content = 'youtube-dl --proxy socks5://127.0.0.1:1080 -i -o "%s" -R 20 "%s" --get-url'%(video_path,url)
                     a = os.system(youtube_content.encode('utf-8'))
                     # print a
                     if a ==256:
                           print '错误'
                           if re_num == 1:
                                  db_client.alex_movie.alex_movie_bytwitter.update({'_id':temp['_id']},{'$set':{'is_download':False}})
                                  pass
                            pass
                     if a ==0:
                           print '成功'
                           db_client.alex_movie.alex_movie_bytwitter.update({'_id':temp['_id']},{'$set':{'is_mp4':True,'movie_download_site':video_path,'download_time':int(time.time())}})
                           break
                           pass
                      time.sleep(3)
                      re_num -= 1
                      pass
           except Exception, e:
                 print '....'
                 pass

    if __name__ == '__main__':
          db_client = MongoClient('192.168.86.136',27017)
          while True:
              result1 = db_client.alex_movie.alex_movie_bytwitter.find({'is_download':True,'mp3_url':{'$exists':False}}).limit(1)
              # r_num =len(result1)
              if result1:
                  print '------>ok'
                  for r_1 in result1:
                          p = r_1['_id']
                          db_client.alex_movie.alex_movie_bytwitter.update({'_id':p},{'$set':{'is_download':False}})
                          # download(p)
                          get_download_url(p)
                          pass
                  pass
              else:
                   break
                   pass
              pass
              db_client.close()

  • 相关阅读:
    自己用的vim插件
    关于利用python进行验证码识别的一些想法
    看看黑客如何破解验证码机制
    不懂技术的人不要对懂技术的人说这很容易实现
    4个mysql客户端工具的比较
    GB2312,GBK和UTF-8的区别
    Windows下用Python你会几种copy文件的方法?
    python3.4连接mysql数据库的方法
    python3操作mysql教程
    python win32com
  • 原文地址:https://www.cnblogs.com/zhaobang/p/7106801.html
Copyright © 2011-2022 走看看