使用 Python3 中的 Urllib 下载文件,出现 HTTP 错误 403 - 伪造用户代理?

Using Urllib in Python3 to download a file, giving HTTP error 403- faking a user agent?

我正在使用 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 Error 403: Forbidden

经过数小时的搜索,我发现这很可能是由于该网站不喜欢用于访问该网站的用户代理。我试图改变用户代理但没有任何运气,因为我不能简单地提供 header 到 urlretrieve

使用requests 库:

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)