请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站English Version

AdvertCN - 广告中国

 找回密码
 立即注册

QQ登录

只需一步,快速开始

Admitad
易赚网长期兑换paypal美元 值得信赖的顶级空间会员请立即修改密码ADPLEXITY + ADVERTCN寻有项目的朋友合作
adsense现号合作交流群:623607Afilter Tracker 首月5折Nutra大刀offer原生广告培训广告位出租
查看: 563|回复: 4

爬虫生成视频字幕然后youtube

[复制链接]

7

主题

36

广告币

73

积分

初级会员

Rank: 2

积分
73
发表于 2018-9-8 13:22:29 | 显示全部楼层 |阅读模式
分享到:
本帖最后由 xiaoxue 于 2018-9-8 13:26 编辑

#爬虫调用test.py 生成视频

  1. # -*- coding: utf-8 -*-
  2. from aip import AipSpeech
  3. import os
  4. import sys
  5. from PIL import Image, ImageDraw,ImageFont

  6. """ 你的 APPID AK SK """
  7. APP_ID = 'XXX'
  8. API_KEY = 'XXX'
  9. SECRET_KEY = 'XXX'
  10. client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
  11. def tupiandaxiao_old(file):
  12.         try:
  13.                 im = Image.open(file)
  14.                 # 图片的宽度和高度
  15.                 img_size = im.size
  16.                 '''
  17.                 裁剪:传入一个元组作为参数
  18.                 元组里的元素分别是:(距离图片左边界距离x, 距离图片上边界距离y,距离图片左边界距离+裁剪框宽度x+w,距离图片上边界距离+裁剪框高度y+h)
  19.                 '''
  20.                 # 截取图片中一块宽和高都是250的
  21.                 print(file+"图片宽度和高度分别是{}".format(img_size))
  22.                 im = im.resize((1280, 720),Image.ANTIALIAS)
  23.                 im.save(file)
  24.         except IOError:
  25.                 return False


  26. def tupiandaxiao(file):
  27.         try:
  28.                 base_img = Image.new("RGB",(1280,720),"#000000")
  29.                 (w, h) =  base_img.size


  30.                 tmp_img = Image.open(file)
  31.                 if tmp_img.size[1] < 720:
  32.                         tmp_img = tmp_img.resize((720, 720),Image.ANTIALIAS)

  33.                 (tmpw, tmph) = tmp_img.size

  34.                 neww = (w/2) - (tmpw/2)
  35.                 newh = (h/2) - (tmph/2)

  36.                 base_img.paste(tmp_img,(neww,newh,(neww+tmpw),(newh+tmph)))
  37.                 base_img.save(file)
  38.         except IOError:
  39.                 return False        

  40. def file_name(file_dir):   
  41.     L=[]   
  42.     for root, dirs, files in os.walk(file_dir):  
  43.         for file in files:  
  44.                          if file[0] == '.':
  45.                                  continue
  46.                          L.append(os.path.join(root, file))
  47.     return L


  48. if len(sys.argv) < 2:
  49.         print "filename is Null..."
  50.         exit()
  51. outfilename = sys.argv[1]




  52. file = open('./text.txt','r')
  53. text = file.readlines()
  54. if text == '':
  55.         print 'text is null!!!'
  56.         exit()
  57. text = ''.join(text)
  58. print text



  59. text = unicode(text, 'utf-8')

  60. n = 500
  61. #print([text[i:i+n] for i in xrange(0, len(text), n)])
  62. namei = 0
  63. for i in xrange(0, len(text), n):
  64.         audio = client.synthesis(text[i:i+n])
  65.         file = open('./tmp/audio/'+str(namei)+'.mp3','wb')
  66.         namei = namei + 1
  67.         file.write(''.join(audio))
  68.         file.close()

  69. pics = file_name('./tmp/pic/')
  70. picsz = len(pics)
  71. for pic in pics:
  72.         tupiandaxiao_old(pic)
  73. audios = file_name('./tmp/audio/')
  74. audios = sorted(audios)
  75. audiosz = len(audios)
  76. if len(audios) <= 1:
  77.         os.system('cp ' + audios[0] +' ./tmp/j5.mp3')
  78. else:        
  79.         runmp3str = "ffmpeg -y "
  80.         for i in audios:
  81.                 runmp3str = runmp3str + "-i " + i + " "
  82.         runmp3str = runmp3str + " -filter_complex '[0:0] [1:0] concat=n=" + str(audiosz) + ":v=0:a=1 [a]' -map '[a]' ./tmp/j5.mp3"
  83.         print runmp3str
  84.         os.system(runmp3str)

  85. timesec = os.popen('ffprobe -i ./tmp/j5.mp3 -show_entries format=duration -v quiet -of csv="p=0"').read().replace('\n','')
  86. framerate = picsz / float(timesec)
  87. print ('framerate:%s - timesec:%s' % (framerate,timesec))
  88. #os.system('cat ./tmp/pic/* |ffmpeg  -y -f image2 -loop 1 -framerate ' + str(framerate) + ' -f image2pipe -i - -c:v libx264  -t ' + str(timesec) + ' ./tmp/output.mp4')
  89. runvideostr = 'cat ./tmp/pic/* |ffmpeg -loglevel warning -threads 2 -y -i ./tmp/j5.mp3 -f image2 -loop 1 -framerate ' + str(framerate) + ' -f image2pipe -i - -c:v libx264  -t ' + str(timesec) + ' -max_muxing_queue_size 99999 -r 25 -shortest ./tmp/outout2.mp4'
  90. print runvideostr
  91. os.system(runvideostr)
  92. runvideostr = "ffmpeg -loglevel warning -threads 2 -y -i ./tmp/outout2.mp4 -c:v libx264 -crf 22 -preset slow -pix_fmt yuv420p -c:a libmp3lame  -ac 2 -ar 44100 -vf \"drawtext=fontcolor=f9f1ea:shadowx=2:shadowy=2:fontsize=30:fontfile=msyh.ttf:textfile=text.txt:reload=1:y=h-line_h-52:x=w-(mod(8*n\\,w+tw)-tw/40)\" -vcodec libx264 ./tmp/" + outfilename.replace('.mp4','.mkv')
  93. print runvideostr
  94. os.popen(runvideostr)

  95. runmp3str = "ffmpeg -loglevel warning -i ./tmp/" + outfilename.replace('.mp4','.mkv') + " -i pt.mkv  -filter_complex \"[1:v]loop=-1:size=500:,setpts=N/FRAME_RATE/TB,scale=1280x720[t1];[0:v]scale=1240x680, setpts=PTS-STARTPTS,format=yuva420p[t0];[t1][t0]overlay=20:20:shortest=1:enable='between(t\\,0.5,"+ str(timesec) +")'\" -c:a copy -y -threads 4 ./tmp/output.mkv"
  96. print runmp3str
  97. os.system(runmp3str)

  98. runmp3str = "ffmpeg -loglevel warning -y -i pt.mp4 -i ./tmp/output.mkv -filter_complex '[0:v] scale=1280x720,fade=t=out:st=8:d=2 [v0]; [1:v] fade=t=in:st=0:d=2 [v1]; [v0][0:a][v1][1:a] concat=n=2:v=1:a=1[v]' -map '[v]' -threads 4 ./tmp/" + outfilename
  99. print runmp3str
  100. os.system(runmp3str)

复制代码

pt.mp4 是片头 与test.py 放到 一个目录上传 用的 youtube_upload 到github.com自取。
写的非常的乱。 能用的拿去用吧。
相关帖子
Adcombo
回复

使用道具 举报

22

主题

580

广告币

881

积分

中级会员

Rank: 3Rank: 3

积分
881

社区QQ达人MobVista达人

发表于 6 天前 | 显示全部楼层
再整个画中画吧。不然很容易被人举报。画中画的话  我这边封号概率小

评分

参与人数 1广告币 +5 收起 理由
leeker + 5

查看全部评分

SelfAdvertiser
回复 支持 1 反对 0

使用道具 举报

7

主题

36

广告币

73

积分

初级会员

Rank: 2

积分
73
 楼主| 发表于 2018-9-8 13:25:18 | 显示全部楼层
爬虫

  1. # -*- coding: UTF-8 -*-
  2. from aip import AipNlp
  3. import pymysql.cursors
  4. import requests
  5. from tqdm import tqdm
  6. import time,random
  7. from lxml import etree
  8. from json import *
  9. import re,sys
  10. from bs4 import BeautifulSoup
  11. import os,subprocess
  12. from urllib import quote
  13. import subprocess


  14. reload(sys)
  15. sys.setdefaultencoding('utf8')


  16. import redis
  17. import hashlib

  18. class CheckExist:
  19.     _redis = None
  20.     _type = None

  21.     def __init__(self, _type):
  22.         self._type = _type
  23.         self._redis = redis.StrictRedis(host='localhost', port=6379,db=2)

  24.     def md5Encode(self, str):
  25.         m = hashlib.md5()
  26.         m.update(str)
  27.         return m.hexdigest()

  28.     def checkExist(self, str):
  29.         md5 = self.md5Encode(str)
  30.         result = self._redis.zscore(self._type + '_unique_timer', md5)
  31.         if not result:
  32.             return True
  33.         return False


  34. def md5Encode(str):
  35.     m = hashlib.md5()
  36.     m.update(str)
  37.     return m.hexdigest()

  38. def getHtmlTree(url, **kwargs):
  39.     """
  40.     获取html树
  41.     :param url:
  42.     :param kwargs:
  43.     :return:
  44.     """

  45.     header = {'Connection': 'keep-alive',
  46.               'Cache-Control': 'max-age=0',
  47.               'Upgrade-Insecure-Requests': '1',
  48.               'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko)',
  49.               'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  50.               'Accept-Encoding': 'gzip, deflate, sdch',
  51.               'Accept-Language': 'zh-CN,zh;q=0.8',
  52.               }
  53.     # TODO 取代理服务器用代理服务器访问
  54.     wr = WebRequest()

  55.     # delay 2s for per request
  56.     time.sleep(2)

  57.     html = wr.get(url=url, header=header).content
  58.     return etree.HTML(html)


  59. class WebRequest(object):
  60.     def __init__(self, *args, **kwargs):
  61.         pass

  62.     @property
  63.     def user_agent(self):
  64.         """
  65.         return an User-Agent at random
  66.         :return:
  67.         """
  68.         ua_list = [
  69.             'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101',
  70.             'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122',
  71.             'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71',
  72.             'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95',
  73.             'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71',
  74.             'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)',
  75.             'Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50',
  76.             'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0',
  77.             ]
  78.         return random.choice(ua_list)

  79.     @property
  80.     def header(self):
  81.         """
  82.         basic header
  83.         :return:
  84.         """
  85.         return {'User-Agent': self.user_agent,
  86.                 'Accept': '*/*',
  87.                 'Connection': 'keep-alive',
  88.                 'Accept-Language': 'zh-CN,zh;q=0.8'}

  89.     def get(self, url, header=None, retry_time=5, timeout=30,
  90.             retry_flag=list(), retry_interval=5, *args, **kwargs):
  91.         """
  92.         get method
  93.         :param url: target url
  94.         :param header: headers
  95.         :param retry_time: retry time when network error
  96.         :param timeout: network timeout
  97.         :param retry_flag: if retry_flag in content. do retry
  98.         :param retry_interval: retry interval(second)
  99.         :param args:
  100.         :param kwargs:
  101.         :return:
  102.         """
  103.         
  104.         headers = self.header
  105.         if header and isinstance(header, dict):
  106.             headers.update(header)
  107.         #print headers
  108.         while True:
  109.             try:
  110.                 html = requests.get(url, headers=headers, timeout=timeout, stream=True)
  111.                 if any(f in html.content for f in retry_flag):
  112.                     raise Exception
  113.                 return html
  114.             except Exception as e:
  115.                 print(e)
  116.                 retry_time -= 1
  117.                 if retry_time <= 0:
  118.                     # 多次请求失败时,返回百度页面
  119.                     return requests.get("https://www.baidu.com/")
  120.                 time.sleep(retry_interval)

  121. def DownloadImage(url, path, refer=None):
  122.     with open(path, 'wb') as handle:
  123.         if refer:
  124.                 hdr = {
  125.                    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
  126.                    'Referer': refer}
  127.         else:
  128.                 hdr = {
  129.                    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
  130.                    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  131.                    'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
  132.                    'Accept-Encoding': 'none',
  133.                    'Accept-Language': 'en-US,en;q=0.8',
  134.                    'Connection': 'keep-alive'}
  135.         wr = WebRequest()
  136.         #print hdr
  137.         response = wr.get(url,header=hdr)
  138.         #html = requests.get('https://www.example.com', proxies={"http": "http://{}".format(proxy)})
  139.         #response = requests.get(url, stream=True, headers={'User-agent': 'Mozilla/5.0'})
  140.         print url
  141.         for block in tqdm(response.iter_content(),ascii=True, desc='ImageDownload'):
  142.             if not block:
  143.                 break
  144.             handle.write(block)

  145. def get_suffix(name):
  146.     m = re.search(r'\.[^\.]*

  147. , name)
  148.     if m.group(0) and len(m.group(0)) <= 5:
  149.         return m.group(0)
  150.     else:
  151.         return '.jpeg'

  152. def GetImageForBaidu(keyword):
  153.     hdr = {
  154.        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
  155.        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  156.        'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
  157.        'Accept-Encoding': 'none',
  158.        'Accept-Language': 'en-US,en;q=0.8',
  159.        'Connection': 'keep-alive'}
  160.     wr = WebRequest()
  161.     pn = 0
  162.     url = 'http://image.baidu.com/search/avatarjson?tn=resultjsonavatarnew&ie=utf-8&word=' + keyword + '&cg=girl&pn=' + str(pn) + '&rn=60&itg=0&z=0&fr=&width=&height=&lm=-1&ic=0&s=0&st=-1&gsm=1e0000001e'
  163.     Body = wr.get(url,header=hdr).content
  164.     #class="imgpage"
  165.     #print Body
  166.     imgs = json.loads(Body,)['imgs']
  167.     return [imgs,url]

  168. def GenVideo(Content,title,outfilename,VideTmpPath,imgs=None):
  169.     #Content = GetPopleNewsBody(url)
  170.     title = title.strip()
  171.     #title = Content[0].strip().replace(',','').replace('。','').replace('“','').replace('|','').replace('-','').replace("'",'').replace('”','').strip()
  172.     print "Title: " + title

  173.     #print "Content: " + Content[1]
  174.     with open('text.txt', 'wb') as handle:
  175.         handle.write(Content.replace(' ','').strip().replace('%','百分比'))#.replace('。','').replace('、','').replace(',',''))

  176.     #flush tmp file...
  177.     os.system("rm ./tmp/audio/* && rm ./tmp/pic/*")

  178.     print 'Downloading for Images...'
  179.     i = 0
  180.     if len(imgs) < 3:
  181.         if len(imgs) >= 1:
  182.             hz = '.jpg'
  183.             DownloadImage(imgs[0],VideTmpPath + 'pic/' + str(i) + hz)
  184.         imgs = GetImageForBaidu(title)
  185.         for img in imgs[0][:5]:
  186.             imgurl = ''.join(img['thumbURL'])
  187.             refer = imgs[1]
  188.             hz = get_suffix(imgurl)
  189.             DownloadImage(imgurl, VideTmpPath + 'pic/' + str(i) + hz, refer)
  190.             i = i + 1

  191.         # if ((len(Content[2]) > 1) or (Content[2][0].find('http') >= 0)):  
  192.         #   DownloadImage(Content[2][0],VideTmpPath + 'pic/' + str(i) + hz)
  193.         # else:
  194.         #   DownloadImage("http:"+Content[2][0],VideTmpPath + 'pic/' + str(i) + hz)
  195.     else:
  196.         for img in imgs:
  197.             # hzs = img.split('.')
  198.             # hz = '.' + hzs[len(hzs) - 1]
  199.             if img == None:
  200.                 continue
  201.             hz = '.jpeg'
  202.             #DownloadImage("http:"+img, VideTmpPath + 'pic/' + str(i) + hz)
  203.             if hz.find('gif') == 0:
  204.                     continue

  205.             #print hz

  206.             if img.find('http') >= 0:
  207.                 DownloadImage(img, VideTmpPath + 'pic/' + str(i) + hz)
  208.             else:   
  209.                 DownloadImage("http:"+img, VideTmpPath + 'pic/' + str(i) + hz)
  210.             i = i+1

  211.     print "Gen for Video..."
  212.     os.system('python ./test_weixin.py '+ outfilename)


  213.     print "Uploading for Video..."
  214.     VideoPath = time.strftime("%Y%m%d_%H%M%S", time.localtime()) + str(random.randint(100,999)) + "/"
  215.     os.system('mkdir ' + './tmp/'+VideoPath)
  216.     os.system('cp text.txt ' + './tmp/'+VideoPath)
  217.     os.system('cp ./tmp/' + outfilename + ' ./tmp/'+VideoPath)
  218.     os.system('echo "' + title + '" > ' + './tmp/'+VideoPath + 'title.txt')

  219.     cmd = 'proxychains4 ./ytupload --client-secrets client_secrets_pinforc.json --playlist="微信热播" --title "'+title+'" --description-file=text.txt ./tmp/'+ outfilename
  220.     p = subprocess.Popen(cmd, shell=True,stdout=subprocess.PIPE)
  221.     Uploadstr = p.communicate()
  222.     if Uploadstr[0].find('\n') > 0:
  223.         _redis = redis.StrictRedis(host='localhost', port=6379,db=2)
  224.         md5 = md5Encode(title)
  225.         _redis.zadd('article_unique_timer', int(time.time()), md5)
  226.         print 'insert success'
  227.     else:
  228.         print "上传失败: " + title
  229.         #os.system('echo '+ url +' >> /tmp/dwlists_shibai.txt')
  230.    
  231.     os.system('rm ./tmp/'+ outfilename)
  232.     ##os.system('proxychains4 ./ytupload --client-secrets client_secrets.json --title "'+title+'" --description-file=text.txt ./tmp/'+ outfilename)
  233.    

  234. def DownloadVideo(url, path):
  235.         with open(path, 'wb') as handle:
  236.                 hdr = {
  237.                    'User-Agent': 'Mozilla/5.0 (Linux; U; Android 7.0; zh-CN; SM-G9550 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.7.0.953 Mobile Safari/537.36',
  238.                    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  239.                    'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
  240.                    'Accept-Encoding': 'none',
  241.                    'Accept-Language': 'en-US,en;q=0.8',
  242.                    'Connection': 'keep-alive'}
  243.                 wr = WebRequest()
  244.                 response = wr.get(url)
  245.                 #html = requests.get('https://www.example.com', proxies={"http": "http://{}".format(proxy)})
  246.                 #response = requests.get(url, stream=True, headers={'User-agent': 'Mozilla/5.0'})
  247.                 print url
  248.                 for block in tqdm(response.iter_content(),ascii=True, desc='Download'):
  249.                         if not block:
  250.                                 break
  251.                         handle.write(block)

  252. # def freeProxySeventh():
  253. #     url = "https://www.kuaidaili.com/free/inha/{page}/"
  254. #     for page in range(1, 10):
  255. #         page_url = url.format(page=page)
  256. #         tree = getHtmlTree(page_url)
  257. #         proxy_list = tree.xpath('.//table//tr')
  258. #         for tr in proxy_list[1:]:
  259. #             yield ':'.join(tr.xpath('./td/text()')[0:2])

  260. # for proxy_list in freeProxySeventh():
  261. #         print proxy_list
  262. #     
  263. def quoterepl(matchobj):
  264.     pattern = re.compile('"')
  265.     return 'onclick="' + pattern.sub('&quot;', matchobj.group(0)[9: -2]) + '">'

  266. hdr = {
  267.     'Accept': '*/*',
  268.     'Accept-Encoding': 'gzip, deflate',
  269.     'Accept-Language': 'en-US,en;q=0.9',
  270.     'Cache-Control': 'no-cache',
  271.     'Connection': 'keep-alive',
  272.     'Cookie': 'acw_tc=AQAAACE/1G8bkwgA1KLD3Xqdhtw2Tx1D; _csrf-frontend=5a12dba43b67f5d2cdaf1446ed2bbb87bde2ef1a6c4c1ac3b50e8d35000617eda%3A2%3A%7Bi%3A0%3Bs%3A14%3A%22_csrf-frontend%22%3Bi%3A1%3Bs%3A32%3A%22RLRf7R8Gkxrr1o61XYILRp3tMb1-Ujrl%22%3B%7D; bdshare_firstime=1525573463599; Hm_lvt_293b2731d4897253b117bb45d9bb7023=1525573464; PHPSESSID=25rl2abqgflla3o1uanl49g1q5; Hm_lpvt_293b2731d4897253b117bb45d9bb7023=1525575033',
  273.     'DNT': '1',
  274.     'Host': 'www.gsdata.cn',
  275.     'Pragma': 'no-cache',
  276.     'Referer': 'http://www.gsdata.cn/rank/wxarc',
  277.     'User-Agent': 'Mozilla/5.0 (compatible; Baiduspider/2.0;+http://www.baidu.com/search/spider.html)',
  278.     'X-Requested-With': 'XMLHttpRequest'}

  279. wr = WebRequest()
  280. #http://www.gsdata.cn/rank/ajax_wxarc?post_time=2&page=1&types=all&industry=all&ori=1&proName=
  281. c = wr.get('http://www.gsdata.cn/rank/ajax_wxarc?post_time=2&page=1&types=all&industry=all&ori=1&proName=',header=hdr)
  282. #print c.content
  283. import json
  284. content = json.loads(c.content)
  285. content = content['data']
  286. content = re.sub('onclick=\"(.*?)\">', quoterepl, content)

  287. tree = etree.HTML(content)
  288. article_el = tree.xpath('//td[@class="al"]//span/a')
  289. article = []
  290. for i, el in enumerate(article_el):
  291.     try:
  292.         item = {}
  293.         item['title'] = el.xpath('string(.)').encode('utf-8').strip()
  294.         item['url'] = el.attrib['href']
  295.         #print item
  296.         detail = wr.get(item['url'], timeout=30).text
  297.         cover_pattern = re.compile(r'msg_cdn_url = \"([\s\S]*?)\"')
  298.         item['cover'] = []
  299.         cover = cover_pattern.findall(detail)[0]
  300.         item['cover'].append(cover)
  301.         item['cover'] = JSONEncoder().encode(item['cover'])
  302.         content_pattern = re.compile(r'<div id="page-content" class="rich_media_area_primary">([\s\S]*?)<script nonce')
  303.         soup = BeautifulSoup('<div id="page-content" class="rich_media_area_primary">' + content_pattern.findall(detail)[0],'lxml')
  304.         item['img'] = []
  305.         for img in soup.find_all('img'):
  306.             dataSrc = img.get('data-src')
  307.             if dataSrc == None:
  308.                 continue
  309.             # for src in dataSrc:
  310.             #     if ''.join(src).find('gif') > 0:
  311.             #         dataSrc.remove(src)
  312.             if dataSrc.find('jpeg?') >= 0:
  313.                 continue
  314.             if dataSrc.find('gif') >= 0:
  315.                 continue
  316.             if dataSrc.find('png') >= 0:
  317.                 continue               
  318.             item['img'].append(dataSrc)
  319.         import HTMLParser
  320.         t = HTMLParser.HTMLParser()
  321.         content = []
  322.         item['content'] = ''
  323.         for p in soup.find_all('p'):
  324.             try:
  325.                 p.string.replace(' ', '&nbsp;')
  326.                 p.string.replace('  ', ' &#32;')
  327.                 p.string = t.unescape(p.string)
  328.                 content.append(p.string)
  329.             except:
  330.                 continue
  331.         #print item
  332.         content = ''.join(content)
  333.         if len(content) > 500:
  334.             item['content'] = content
  335.             article.append(item)
  336.     except Exception as e:
  337.         print e
  338.     finally:
  339.         pass

  340. VideTmpPath = './tmp/'
  341. check = CheckExist('article')
  342. _redis = redis.StrictRedis(host='localhost', port=6379,db=2)
  343. for Video in article:
  344.     if not check.checkExist(Video['title']):
  345.         print Video['title'] + 'current article exist'
  346.         continue
  347.     print Video['title']
  348.     content = Video['content']
  349.     outfilename = time.strftime("%Y%m%d_%H%M%S", time.localtime()) + str(random.randint(100,999)) + ".mp4"
  350.     imgs = Video['img'][1:len(Video['img']) - 2]
  351.     title = Video['title']
  352.     #print imgs
  353.     # md5 = md5Encode(title)
  354.     # print md5
  355.     # _redis.zadd('article_unique_timer', int(time.time()), md5)

  356.     #print content,outfilename,imgs
  357.     GenVideo(content,title,outfilename,VideTmpPath,imgs)

复制代码


回复 支持 反对

使用道具 举报

21

主题

37

广告币

645

积分

中级会员

Rank: 3Rank: 3

积分
645

社区QQ达人MobVista达人

发表于 2018-9-9 17:32:55 | 显示全部楼层
这个不错,貌似采集的是公众号的文章生成视屏?
不忘初心。
回复 支持 反对

使用道具 举报

7

主题

36

广告币

73

积分

初级会员

Rank: 2

积分
73
 楼主| 发表于 5 天前 来自手机 | 显示全部楼层
Black_industrie 发表于 2018-9-14 18:00
再整个画中画吧。不然很容易被人举报。画中画的话  我这边封号概率小

是画中画 用的fade。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Github|联系我们|广告服务|小黑屋|手机版|Archiver|AdvertCN ( 津ICP备17003502号-1|网站地图  

GMT+8, 2018-9-20 23:08 , Processed in 0.081063 second(s), 10 queries , Gzip On, Memcache On.

Powered by Discuz

© 2007-2016 AdvertCN.

快速回复 返回顶部 返回列表