如何在 Python 3 中实现 urllib.urlretrieve 的等效项?
How to implement the equivalent of urllib.urlretrieve in Python 3?
我想使用不同的用户代理从 http://www.apkmirror.com 下载 APK 文件。以下作品在 Python 2:
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)
我正在努力寻找在 Python 3 中执行相同操作而不使用 urllib.request.urlretrieve
的代码,这在将来可能会被弃用。到目前为止我想出了
#!/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)
我怀疑我应该使用 response
对象的 write
方法,但我不确定如何使用,或者这是否是这样做的方法。有什么建议吗?
基于,我完成了Python3脚本如下:
#!/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)
这有点旧,但下面的方法行得通吗?
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)
您可以使用 shutil.copyfileobj()
神奇地从 url 字节流复制到文件。
import urllib.request
import shutil
url = "https://www.apkmirror.com/wp-content/themes/APKMirror/download.php?id=215041"
output_file = "/tmp/apkmirror_test/youtube.apk"
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
with urllib.request.urlopen(url, headers={'User-Agent': user_agent}) as response, open(output_file, 'wb') as out_file:
shutil.copyfileobj(response, out_file)
来源:
我想使用不同的用户代理从 http://www.apkmirror.com 下载 APK 文件。以下作品在 Python 2:
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)
我正在努力寻找在 Python 3 中执行相同操作而不使用 urllib.request.urlretrieve
的代码,这在将来可能会被弃用。到目前为止我想出了
#!/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)
我怀疑我应该使用 response
对象的 write
方法,但我不确定如何使用,或者这是否是这样做的方法。有什么建议吗?
基于
#!/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)
这有点旧,但下面的方法行得通吗?
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)
您可以使用 shutil.copyfileobj()
神奇地从 url 字节流复制到文件。
import urllib.request
import shutil
url = "https://www.apkmirror.com/wp-content/themes/APKMirror/download.php?id=215041"
output_file = "/tmp/apkmirror_test/youtube.apk"
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
with urllib.request.urlopen(url, headers={'User-Agent': user_agent}) as response, open(output_file, 'wb') as out_file:
shutil.copyfileobj(response, out_file)
来源: