আমি একটি ওয়েবপৃষ্ঠা থেকে সমস্ত ফাইল ডাউনলোড করতে চেয়েছিলাম। আমি চেষ্টা করেছি wget
কিন্তু এটি ব্যর্থ হয়েছিল তাই আমি পাইথন রুটের জন্য সিদ্ধান্ত নিয়েছি এবং আমি এই থ্রেডটি পেয়েছি।
এটি পড়ার পরে, আমি পাবলোজি এবং স্ট্যানের দুর্দান্তsoupget
উত্তরের উপর প্রসারিত করে কিছু দরকারী বিকল্প যুক্ত করেছিলাম , একটি সামান্য কমান্ড লাইন অ্যাপ্লিকেশন তৈরি করেছি ।
এটি পৃষ্ঠার সমস্ত ইউআরএল সংগ্রহ করতে এবং তারপরে পছন্দসই এক্সটেনশন (গুলি) দিয়ে ডাউনলোড করতে বিটিফুলসপ ব্যবহার করে । শেষ পর্যন্ত এটি সমান্তরালে একাধিক ফাইল ডাউনলোড করতে পারে।
এটা এখানে:
#!/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)
এর ব্যবহারের একটি উদাহরণ:
python3 soupget.py -p -e <list of extensions> -d <destination_folder> -u <target_webpage>
এবং যদি আপনি এটি কার্যকরভাবে দেখতে চান তবে প্রকৃত উদাহরণ:
python3 soupget.py -p -e .xlsx .pdf .csv -u https://healthdata.gov/dataset/chemicals-cosmetics