2017-05-19 10 views
0

http://www.apkmirror.comから別のユーザーエージェントを使用してAPKファイルをダウンロードしたいと考えています。 Pythonの2で、次の作品:Python 3でurllib.urlretrieveと同等の機能を実装する方法は?

import urllib 

class ApkURLopener(urllib.FancyURLopener): 
    version = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36' 

urllib._urlopener = ApkURLopener() 

download_link = 'https://www.apkmirror.com/wp-content/themes/APKMirror/download.php?id=215041' 
download_file = '/tmp/apkmirror_test/youtube.apk' 

if __name__ == "__main__": 
    urllib.urlretrieve(url=download_link, filename=download_file) 

は、私は将来的には非推奨になる可能性がある、urllib.request.urlretrieveを使用せずに、Pythonの3に同じことを行うためのコードを見つけるために少し苦労しています。これまでのところ私はresponseオブジェクトのwriteメソッドを使用する必要があります疑う

#!/usr/bin/python3 
import urllib.request 

download_link = 'https://www.apkmirror.com/wp-content/themes/APKMirror/download.php?id=215041' 
download_file = '/tmp/apkmirror_test/youtube.apk' 

USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36' 

request = urllib.request.Request(url=download_link, headers={'User-Agent': USER_AGENT}) 

if __name__ == "__main__": 
    response = urllib.request.urlopen(url=request) 

を作ってみたが、私はわからない方法、または実際に、これはそれを行う方法があるかどうか。何かアドバイス?

答えて

0

Alternative of urllib.urlretrieve in Python 3.5に基づいて、私は次のようにPythonの3スクリプトを完成:

#!/usr/bin/python3 
import urllib.request 
import contextlib 

download_link = 'https://www.apkmirror.com/wp-content/themes/APKMirror/download.php?id=215041' 
download_file = '/tmp/apkmirror_test/youtube2.apk' 

USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36' 

request = urllib.request.Request(url=download_link, headers={'User-Agent': USER_AGENT}) 

if __name__ == "__main__": 
    response = urllib.request.urlopen(url=request) 

    with open(download_file, 'wb') as out_file: 
     with contextlib.closing(response) as fp: 
      block_size = 1024 * 8 
      while True: 
       block = fp.read(block_size) 
       if not block: 
        break 
       out_file.write(block) 
0

これは少し古いですが、次の仕事がしませんか?

import urllib.request as rq, os 
from urllib.parse import urlparse 


url = "your_url" 
result = urllib.request.urlopen(url) 
result_url = result.url 
result_url_parse = urlparse(result_url) 
result_path = result_url_parse.path 
filename = os.path.basename(result_path) 
download = rq.urlretrieve(url,filename) 
関連する問題