首页 文章

在Python3中使用Urllib下载文件,给予HTTP错误403伪造用户代理?

提问于
浏览
3

我正在使用phantomJS和selenium使用anything2mp3.com将Youtube视频转换为mp3,然后尝试下载文件 .

我正在尝试使用Python 3中的 urllib 来下载.mp3文件 . 但是,当我尝试:

url = 'example.com'
fileName = 'testFile.mp3'
urllib.request.urlretrieve(url, fileName)

我收到错误:

urllib.error.HTTPError:HTTP错误403:禁止

从搜索时间开始,我发现可能是因为网站不喜欢用户代理用于访问网站 . 我有点运气,因为我不能简单地为 urlretrieve 提供一个 Headers .

1 回答

  • 1

    使用 requests lib:

    SERVICE_URL = 'http://anything2mp3.com/'
    YOUTUBE_URL = 'https://youtu.be/AqCWi_-vnTg'
    FILE_NAME = 'song.mp3'
    
    USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'
    
    # Get mp3 link using selenium
    
    browser = webdriver.PhantomJS()
    browser.get(SERVICE_URL)
    search = browser.find_element_by_css_selector('#edit-url')
    search.send_keys(YOUTUBE_URL)
    submit = browser.find_element_by_css_selector('#edit-submit--2')
    submit.click()
    a = WebDriverWait(browser, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#block-system-main > a')))
    download_link = a.get_attribute('href')
    
    # Download file using requests
    # http://docs.python-requests.org/en/latest/
    
    r = requests.get(download_link, stream=True, headers={'User-Agent': USER_AGENT})
    with open(FILE_NAME, 'wb') as f:
        for chunk in r.iter_content(chunk_size=1024):
            if chunk:
                f.write(chunk)
    

相关问题