【问题标题】:Using Urllib in Python3 to download a file, giving HTTP error 403- faking a user agent?在 Python3 中使用 Urllib 下载文件,给出 HTTP 错误 403- 伪造用户代理?
【发布时间】:2016-03-19 11:43:17
【问题描述】:

我正在使用 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 提供标头。

【问题讨论】:

    标签: http python-3.x user-agent urllib


    【解决方案1】:

    使用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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-03
      • 2023-04-05
      • 1970-01-01
      • 2016-12-23
      • 2021-10-10
      • 2020-06-22
      相关资源
      最近更新 更多