Hướng dẫn python to download file from url - python để tải xuống tệp từ url


Python cung cấp các mô -đun khác nhau như urllib, yêu cầu vv để tải xuống các tệp từ web. Tôi sẽ sử dụng thư viện yêu cầu của Python để tải xuống các tệp một cách hiệu quả từ các URL.

Hãy bắt đầu xem xét thủ tục từng bước để tải xuống các tệp bằng URL bằng thư viện yêu cầu -

1. Nhập mô -đun

import requests

2. Nhận liên kết hoặc URL

url = 'https://www.facebook.com/favicon.ico'
r = requests.get(url, allow_redirects=True)

3. Lưu nội dung với tên.

open('facebook.ico', 'wb').write(r.content)

Lưu tệp dưới dạng Facebook.ICO.

Thí dụ

import requests


url = 'https://www.facebook.com/favicon.ico'
r = requests.get(url, allow_redirects=True)

open('facebook.ico', 'wb').write(r.content)

Kết quả

Hướng dẫn python to download file from url - python để tải xuống tệp từ url

Chúng ta có thể thấy tệp được tải xuống (biểu tượng) trong thư mục làm việc hiện tại của chúng tôi.

Nhưng chúng ta có thể cần tải xuống các loại tệp khác nhau như hình ảnh, văn bản, video, vv từ web. Vì vậy, trước tiên, hãy để có được loại dữ liệu mà URL đang liên kết đến−

>>> r = requests.get(url, allow_redirects=True)
>>> print(r.headers.get('content-type'))
image/png

Tuy nhiên, có một cách thông minh hơn, liên quan đến việc tìm kiếm các tiêu đề của một URL trước khi thực sự tải xuống nó. Điều này cho phép chúng tôi bỏ qua việc tải xuống các tệp mà người sói có nghĩa là sẽ được tải xuống.

>>> print(is_downloadable('https://www.youtube.com/watch?v=xCglV_dqFGI'))
False
>>> print(is_downloadable('https://www.facebook.com/favicon.ico'))
True

Để hạn chế tải xuống theo kích thước tệp, chúng tôi có thể lấy FileZie từ tiêu đề độ dài nội dung và sau đó thực hiện theo yêu cầu của chúng tôi.

contentLength = header.get('content-length', None)
if contentLength and contentLength > 2e8: # 200 mb approx
return False

Nhận tên tệp từ một url

Để có được tên tệp, chúng ta có thể phân tích URL. Dưới đây là một thói quen mẫu lấy chuỗi cuối cùng sau khi chao đảo (/).

url= "http://www.computersolution.tech/wp-content/uploads/2016/05/tutorialspoint-logo.png"
if url.find('/'):
print(url.rsplit('/', 1)[1]

Trên đây sẽ cung cấp tên tệp của URL. Tuy nhiên, có nhiều trường hợp thông tin tệp không có trong URL chẳng hạn - http://url.com/doad. Trong trường hợp như vậy, chúng ta cần phải có tiêu đề xử lý nội dung, chứa thông tin tên tệp.

import requests
import re

def getFilename_fromCd(cd):
"""
Get filename from content-disposition
"""
if not cd:
return None
fname = re.findall('filename=(.+)', cd)
if len(fname) == 0:
return None
return fname[0]


url = 'http://google.com/favicon.ico'
r = requests.get(url, allow_redirects=True)
filename = getFilename_fromCd(r.headers.get('content-disposition'))
open(filename, 'wb').write(r.content)

Mã phân tích URL trên kết hợp với chương trình trên sẽ cung cấp cho bạn tên tệp từ tiêu đề xử lý nội dung hầu hết thời gian.

Hướng dẫn python to download file from url - python để tải xuống tệp từ url

Cập nhật vào ngày 30 tháng 3 năm 2019 22:30:26

  • Câu hỏi và câu trả lời liên quan
  • Tải xuống tệp bằng trình kết nối SAP .NET
  • Làm thế nào các tệp được trích xuất từ ​​một tệp tar bằng Python?
  • Đổi tên nhiều tệp bằng Python
  • Sử dụng dịch vụ web SAP từ tệp WSDL
  • Web Scraping bằng Python và Scracy?
  • Python thực hiện quét web bằng LXML
  • Làm thế nào để sao chép các tệp từ thư mục này sang thư mục khác bằng Python?
  • Làm thế nào để sao chép các tệp từ máy chủ này sang máy chủ khác bằng Python?
  • Làm thế nào để chuyển đổi các tệp PDF sang các tệp Excel bằng Python?
  • Làm thế nào để sao chép một số tệp nhất định từ thư mục này sang thư mục khác bằng Python?
  • Thực hiện quét web bằng LXML trong Python?
  • HTML5 có cho phép bạn tương tác với các tệp máy khách cục bộ từ trong trình duyệt web không?
  • Tạo các tệp và thư mục tạm thời bằng cách sử dụng Python
  • Làm thế nào để xóa các tệp hoán đổi bằng Python?
  • Cách tạo các tệp PowerPoint bằng Python

Tôi muốn tải xuống tất cả các tệp từ một trang web. Tôi đã thử

url = 'https://www.facebook.com/favicon.ico'
r = requests.get(url, allow_redirects=True)
2 nhưng nó đã thất bại vì vậy tôi đã quyết định cho tuyến đường Python và tôi đã tìm thấy chủ đề này.

Sau khi đọc nó, tôi đã thực hiện một ứng dụng dòng lệnh nhỏ,

url = 'https://www.facebook.com/favicon.ico'
r = requests.get(url, allow_redirects=True)
3, mở rộng trên các câu trả lời tuyệt vời của Pablog và Stan và thêm một số tùy chọn hữu ích.

Nó sử dụng Beardifulsoup để thu thập tất cả các URL của trang và sau đó tải xuống những cái có phần mở rộng mong muốn. Cuối cùng, nó có thể tải xuống nhiều tập tin song song.

Đây là:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from __future__ import (division, absolute_import, print_function, unicode_literals)
import sys, os, argparse
from bs4 import BeautifulSoup

# --- insert Stan's script here ---
# if sys.version_info >= (3,): 
#...
#...
# def download_file(url, dest=None): 
#...
#...

# --- new stuff ---
def collect_all_url(page_url, extensions):
    """
    Recovers all links in page_url checking for all the desired extensions
    """
    conn = urllib2.urlopen(page_url)
    html = conn.read()
    soup = BeautifulSoup(html, 'lxml')
    links = soup.find_all('a')

    results = []    
    for tag in links:
        link = tag.get('href', None)
        if link is not None: 
            for e in extensions:
                if e in link:
                    # Fallback for badly defined links
                    # checks for missing scheme or netloc
                    if bool(urlparse.urlparse(link).scheme) and bool(urlparse.urlparse(link).netloc):
                        results.append(link)
                    else:
                        new_url=urlparse.urljoin(page_url,link)                        
                        results.append(new_url)
    return results

if __name__ == "__main__":  # Only run if this file is called directly
    # Command line arguments
    parser = argparse.ArgumentParser(
        description='Download all files from a webpage.')
    parser.add_argument(
        '-u', '--url', 
        help='Page url to request')
    parser.add_argument(
        '-e', '--ext', 
        nargs='+',
        help='Extension(s) to find')    
    parser.add_argument(
        '-d', '--dest', 
        default=None,
        help='Destination where to save the files')
    parser.add_argument(
        '-p', '--par', 
        action='store_true', default=False, 
        help="Turns on parallel download")
    args = parser.parse_args()

    # Recover files to download
    all_links = collect_all_url(args.url, args.ext)

    # Download
    if not args.par:
        for l in all_links:
            try:
                filename = download_file(l, args.dest)
                print(l)
            except Exception as e:
                print("Error while downloading: {}".format(e))
    else:
        from multiprocessing.pool import ThreadPool
        results = ThreadPool(10).imap_unordered(
            lambda x: download_file(x, args.dest), all_links)
        for p in results:
            print(p)

Một ví dụ về việc sử dụng của nó là:

url = 'https://www.facebook.com/favicon.ico'
r = requests.get(url, allow_redirects=True)
0

Và một ví dụ thực tế nếu bạn muốn xem nó trong hành động:

url = 'https://www.facebook.com/favicon.ico'
r = requests.get(url, allow_redirects=True)
1

Làm cách nào để tự động tải xuống một tệp từ một trang web bằng Python?

Nhập mô -đun. Nhập yêu cầu ..
Nhận liên kết hoặc URL. url = 'https://www.facebook.com/favicon.ico' r = requests.get (url, allow_redirects = true).
Lưu nội dung với tên. Mở ('Facebook.ICO', 'WB'). Viết (R.Content) lưu tệp dưới dạng Facebook. ....
Nhận tên tệp từ một url. Để có được tên tệp, chúng ta có thể phân tích URL ..

Làm cách nào để tạo nút tải xuống trong Python?

Việc triển khai nút tải xuống yêu cầu hai phần: Triển khai tiện ích nút Proto/Frontend để chấp nhận URL và tên tệp tải xuống và tải xuống URL được chỉ định.Thực hiện API ở phía Python để tạo nút.Implement the Proto/Frontend Button Widget to accept a download URL and file name and download the URL specified. Implementing the API on the Python side to create a button.

Yêu cầu có nhận được tệp tải xuống không?

Yêu cầu là một thư viện HTTP đa năng trong Python với các ứng dụng khác nhau.Một trong những ứng dụng của nó là tải xuống một tệp từ web bằng URL tệp.download a file from web using the file URL.

Làm thế nào để bạn tải xuống một hình ảnh từ một url trong python?

Chúng ta có thể hoàn thành nhiệm vụ này bằng một trong các tùy chọn sau:..
Phương pháp 1: Sử dụng yêu cầu.Nhận () và viết ().
Phương pháp 2: Sử dụng yêu cầu.Nhận () và hình ảnh ..
Phương pháp 3: Sử dụng yêu cầu.Nhận () và Shutil ..
Phương pháp 4: Sử dụng urllib.lời yêu cầu.urlretrieve ().
Phần thưởng: Tải xuống tất cả các hình ảnh bằng cách sử dụng một vòng lặp ..