【问题标题】:Is there any way to download the audio from a certain page有什么方法可以从某个页面下载音频
【发布时间】:2021-04-01 15:50:19
【问题描述】:

我正在使用 python 编写一个 selenium 脚本,并想下载来自某个页面的音频。

页面如下所示:

页面的 HTML 代码:

<html>
<head>
<meta name="viewport" content="width=device-width">
</head>
<body>
<video controls="" autoplay="" name="media">
<source src="https://website//id=47c484fc7f8f" type="audio/mp3">
</video>
</body>
</html>

到目前为止我的代码:

from seleniumwire import webdriver 
import sys
from webdriver_manager.chrome import ChromeDriverManager
import time
import pyaudio
import wave
from selenium.webdriver.chrome.options import Options



chrome_options = Options()
chrome_options.add_argument("--headless")
# for linux/Ubuntu only
#chrome_options.add_argument("--no-sandbox") 


browser = webdriver.Chrome(ChromeDriverManager().install(), chrome_options=chrome_options)
browser.get("website")
search = browser.find_element_by_id("text-area")
search.clear()
    
text = input("text here : ")
search.send_keys(text)
#print(data)
time.sleep(2)
browser.find_element_by_id("btn").click()

# Access and print requests via the `requests` attribute
for request in browser.requests:
    if request.response and request.url.__contains__('website//id'):
        browser.get(request.url)

我愿意使用任何语言来实现目标

【问题讨论】:

    标签: python selenium automation


    【解决方案1】:

    你不需要 Selenium,请求库就足够了。您必须为您的发布请求提供一个唯一标识符作为 sessionID,以便您可以在下一个获取请求中获取生成的文件。

    以下面的 sn -p 为例,它将生成的文件保存在提供的 sessionID 名称下。

    import requests
    
    sessionID = '78aa8dd0-9529-11eb-a8b3-0242ac130003'
    payload = {'ssmlText': '<prosody pitch=\"default\" rate=\"-0%\">Roses are red, violets are blue</prosody>', 'sessionID': sessionID} 
    
    r1 = requests.post("https://www.ibm.com/demos/live/tts-demo/api/tts/store", data = payload)
    r1.raise_for_status()
    
    print(r1.status_code, r1.reason)
    
    tts_url = 'https://www.ibm.com/demos/live/tts-demo/api/tts/newSynthesize?voice=en-US_OliviaV3Voice&id=' + sessionID
    
    try: 
        r2 = requests.get(tts_url, timeout = 10, cookies = r1.cookies)
        print(r2.status_code, r2.reason)
    
        try: 
            with open(sessionID + '.mp3', "w+b") as f: 
                f.write(r2.content)
        except IOError:
            print("IOError: could not write a file")
        
    except requests.exceptions.Timeout as err: 
        print("Timeout: could not get response from the server")
    

    【讨论】:

    • 它适用于一个句子,但是当我尝试插入一个包含多个句子(数据 [0:400])的变量时,它给了我这个错误:TypeError:字符串索引必须是整数,当我尝试插入像(数据)这样的变量时,它会给我超时错误,当我增加它保持循环的时间并且最后我没有得到任何结果时,请问有什么办法可以解决它。
    • 这个错误很可能来自html数据和它的字符串表示之间的转换。记住它最终应该是一个 json,因此它不应该包含任何不正确的符号。
    • 另外,请注意,10 000 个符号的请求会产生至少 5MB 的音频文件,因此需要更多时间,更大的请求可能需要几分钟。您可能希望将大文本分成较小的块。
    • 我会尝试给它超过 5 分钟,看看会发生什么。 export_data() 函数工作正常,并返回一个包含从 html 文件中想要的句子的字符串。
    • 现在可以正常工作了多次运行脚本?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多