wcr0021 发表于 2020-12-15 19:48:21

关于python ffmpy3的一点小问题

小弟最近一直在研究 如何爬取 http://jisudhw.com/ 这个网站的电影
还是废话不多说 直接上代码
首先我定义了两个方法
def download(url):
    header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1',
            'Referer':'http://www.jisudhw.com',
            'Origin':'http://www.jisudhw.com',
            'Host':'www.jisudhw.com'
      }
    r = req.get(url,headers = header)
    r.encoding = 'utf-8'
    html = BeautifulSoup(r.text,'lxml')

    for each inhtml.find_all('input'):
      if 'm3u8' in each.get('value'):
            durl = each.get('value')
   
    return durl

def ffmpeg_path(inputs_path, outputs_path):
    a = FFmpeg(
                inputs={inputs_path: None},
                outputs={outputs_path: '-c copy',
                        }
    )
    print(a.cmd)
    a.run()
然后调用但是调用之后 就不行了 显示

File "*:\python\*.py", line 11, in <module>
    ffmpy3.FFmpeg(inputs = {url:None},outputs = {name:None}).run()

File "*:\*\ffmpy3.py", line 130, in run
    raise FFRuntimeError(self.cmd, self.process.returncode, out, out)

File "*:\*\ffmpy3.py", line 273, in __init__
    stdout.decode(),

AttributeError: 'NoneType' object has no attribute 'decode'
完全懵逼 不知道怎么回事 再网上找了半天 也没有解决办法 请各位大神帮忙

wcr0021 发表于 2020-12-15 23:25:02

请上天赐给我一个编程大牛吧!!!!

jtxs0000 发表于 2020-12-16 11:26:41

https://fishc.com.cn/thread-176937-1-1.html
看看这个

wcr0021 发表于 2020-12-16 13:49:17

jtxs0000 发表于 2020-12-16 11:26
https://fishc.com.cn/thread-176937-1-1.html
看看这个

首先感谢大神帮我 不过看了你的代码之后 我只是更加疑惑 我是用bs4和re写的 你是用xpath写的 我知道你的代码可以用 我的代码也可以用 但是只针对电视剧可以用 到电影了就不行 也不知道为什么 晚点我把我的代码也发上来

jtxs0000 发表于 2020-12-17 08:56:22

wcr0021 发表于 2020-12-16 13:49
首先感谢大神帮我 不过看了你的代码之后 我只是更加疑惑 我是用bs4和re写的 你是用xpath写的 我知道你的 ...

出现AttributeError也能继续运行?

wcr0021 发表于 2020-12-17 10:40:27

jtxs0000 发表于 2020-12-17 08:56
出现AttributeError也能继续运行?

不能呗 我昨天发的代码不知道为啥没通过审核 我再发一下

wcr0021 发表于 2020-12-17 10:43:11

import requests as re
from bs4 import BeautifulSoup
import os
import ffmpy3
# 线程模块
from multiprocessing.dummy import Pool as ThreadPool
# import easygui as g

search_keyword = input('请输入你要搜索的电影或电视剧名称:')
search_url = 'http://jisudhw.com/index.php'
search_params = {'m':'vod-search'}
header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1',
          'Referer':'http://www.jisudhw.com',
          'Origin':'http://www.jisudhw.com',
          'Host':'www.jisudhw.com'
    }
search_dists = {'wd':search_keyword,'submit':'search'}
r = re.post(search_url,params=search_params,data=search_dists)
r.encoding = 'utf-8'
search_html = BeautifulSoup(r.text,'lxml')
search_span = search_html.find_all('span',class_='xing_vb4')
server = 'http://www.jisudhw.com'

# choice = (search_span.a.string)
# g.choicebox(msg='请选择要下载的电视剧',title='选择框',choices=choice)
for span in search_span:
    url = server+span.a.get('href')
    name = span.a.string
   
    os.chdir('C:\\迅雷下载')
    video_div = name
    if name not in os.listdir('./'):
      os.mkdir(name)
   
    detail_url = url
    resp = re.get(detail_url)
    resp.encoding = 'utf-8'
    detail_bf = BeautifulSoup(resp.text,'lxml')
   
    num = 1
    search_res = {}
   
    for each_url in detail_bf.find_all('input'):
      if 'm3u8' in each_url.get('value'):
            url = each_url.get('value')
            if url not in search_res.keys():
                search_res = num
            num += 1
            print('第%03d集:'%num)
            print(url)
            print(type(url))
            
            
def download(url):
    num = search_res
    name = os.path.join(video_div,'第%03d集.mp4'%num)
    print(type(name))
    ffmpy3.FFmpeg(inputs = {url:None},outputs = {name:None}).run()
   

download(url)
# 开启线程下载
pool = ThreadPool(8)
result = pool.map(download,search_res.keys())
pool.close()
pool.join()

wcr0021 发表于 2020-12-17 22:38:55

jtxs0000 发表于 2020-12-17 08:56
出现AttributeError也能继续运行?

请看下倒数第二楼

jtxs0000 发表于 2020-12-18 08:57:18

wcr0021 发表于 2020-12-17 22:38
请看下倒数第二楼

bs4 我没怎么用过,如果确定代码没问题的话可能就是你换过或者删过一次 ffmpeg.exe了

如果你换了exe 的话就把这个py文件删了,代码复制到另外一个文件去

我有一次是32位换成64位的出过一次问题,之后一直正常

wcr0021 发表于 2020-12-18 10:55:47

jtxs0000 发表于 2020-12-18 08:57
bs4 我没怎么用过,如果确定代码没问题的话可能就是你换过或者删过一次 ffmpeg.exe了

如果你换了exe...

这个问题倒是好解决 只不过就是ctrl加c或是加v的事 现在的问题是 这个代码可以下载电视剧 但是不能下电影 这我就蒙圈了啊

jtxs0000 发表于 2020-12-18 16:30:37

wcr0021 发表于 2020-12-18 10:55
这个问题倒是好解决 只不过就是ctrl加c或是加v的事 现在的问题是 这个代码可以下载电视剧 但是不能下电影 ...

有什么提示吗?我刚用我自己的很正常,电影,电视剧都可以

jtxs0000 发表于 2020-12-18 16:39:57

wcr0021 发表于 2020-12-18 10:55
这个问题倒是好解决 只不过就是ctrl加c或是加v的事 现在的问题是 这个代码可以下载电视剧 但是不能下电影 ...

我刚复制你的代码试了下。一样正常下载啊





wcr0021 发表于 2020-12-18 22:29:44

jtxs0000 发表于 2020-12-18 16:39
我刚复制你的代码试了下。一样正常下载啊

我好像是因为没在name后面加.mp4 我今天试了半天 发现应该就是因为没加.mp4

wcr0021 发表于 2020-12-19 20:03:00

请版主结贴 此问题已解决

g4826057 发表于 2021-3-16 12:09:17

函数内数据转换的问题
inputs_path = str(inputs_path)
outputs_path = str(outputs_path)
就可以了
页: [1]
查看完整版本: 关于python ffmpy3的一点小问题