LpImagesDownloader 1.1.0
A powerful Python package to automate image downloading from any webpage with robust error handling and detailed logging.
Requires Python: >=3.7

![PyPI](https://img.shields.io/pypi/v/lpimagesdownloader)
[![Downloads](https://static.pepy.tech/personalized-badge/lpimagesdownloader?period=total&units=international_system&left_color=black&right_color=brightgreen&left_text=Downloads)](https://pepy.tech/project/lpimagesdownloader)
[![Publish Package](https://github.com/LpCodes/LP-All-Images-Downloader/actions/workflows/python-publish.yml/badge.svg)](https://github.com/LpCodes/LP-All-Images-Downloader/actions/workflows/python-publish.yml)

# LP Images Downloader

A powerful Python package to effortlessly download all images from any webpage. Built with Selenium and modern Python practices, this tool automates image scraping with robust error handling and detailed logging.

## ✨ Features

- **Dynamic Content Handling**: Automatically scrolls through pages to load dynamic images
- **Robust Error Handling**: Comprehensive error catching and logging
- **URL Validation**: Ensures all images are valid before downloading
- **Customizable Save Locations**: Organizes downloaded images into folders based on page titles
- **Detailed Logging**: Provides comprehensive logging of all operations
- **Type Safety**: Full type hints for better code reliability
- **Resource Management**: Proper cleanup of browser resources
- **Progress Tracking**: Returns list of successfully downloaded files

## 📦 Installation

Install the package from PyPI using pip:

```bash
pip install LpImagesDownloader
```

### Requirements
- Python 3.7+
- Chrome browser installed
- Internet connection

## 🚀 Usage/Examples

### Basic Usage

```python
from LpImagesDownloader import download_images

# Download images from a webpage, scrolling 3 times to load dynamic content
downloaded_files = download_images("https://en.wikipedia.org/wiki/India", 3)
print(f"Successfully downloaded {len(downloaded_files)} images")
```

### Advanced Usage with Error Handling

```python
from LpImagesDownloader import download_images
import logging

# Configure logging
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s'
)

try:
    # Download images with custom scroll count
    downloaded_files = download_images("https://example.com", 5)
    print(f"Successfully downloaded {len(downloaded_files)} images")
    
    # Process downloaded files
    for file_path in downloaded_files:
        print(f"Downloaded: {file_path}")
        
except Exception as e:
    logging.error(f"Failed to download images: {e}")
```

### Sample Output

```
2024-03-14 10:30:15 - INFO - Setting up environment...
2024-03-14 10:30:16 - INFO - Loading URL: https://example.com
2024-03-14 10:30:17 - INFO - Running operations in the background...
2024-03-14 10:30:18 - INFO - Scrolling page 1...
2024-03-14 10:30:20 - INFO - Scrolling page 2...
2024-03-14 10:30:22 - INFO - Scrolling page 3...
2024-03-14 10:30:23 - INFO - Total detected images on page: 25
2024-03-14 10:30:24 - INFO - Downloading 1.jpg...
2024-03-14 10:30:25 - INFO - Downloading 2.jpg...
...
2024-03-14 10:30:35 - INFO - Total images downloaded: 25
2024-03-14 10:30:35 - INFO - You can view the saved images at: /path/to/Saved Images/Example
```

## 🔧 Configuration

The package uses sensible defaults but can be customized:

- **Headless Mode**: Browser runs in headless mode by default
- **Timeout**: Default page load timeout is 30 seconds
- **Save Location**: Images are saved in a "Saved Images" directory with subdirectories based on page titles

## 🛠️ Development

### Setting up Development Environment

1. Clone the repository:
```bash
git clone https://github.com/LpCodes/LP-All-Images-Downloader.git
cd LP-All-Images-Downloader
```

2. Install development dependencies:
```bash
pip install -r requirements.txt
```

3. Run tests:
```bash
python -m pytest
```

## 🧑‍💻 Author

Created and maintained by [@LpCodes](https://github.com/LpCodes).

## 📜 License

This project is licensed under the [MIT License](https://choosealicense.com/licenses/mit/). Feel free to use and modify it as needed.

## 🤝 Contributing

Contributions are welcome! Here's how you can contribute:

1. Fork the repository
2. Create a new branch: `git checkout -b feature-name`
3. Make your changes and commit them: `git commit -m 'Add feature-name'`
4. Push to your branch: `git push origin feature-name`
5. Open a pull request and describe your changes

### Development Guidelines
- Follow PEP 8 style guide
- Add type hints to all functions
- Include docstrings for all functions
- Add tests for new features
- Update documentation as needed

## 🐛 Known Issues and Limitations

- Some websites may block automated browsers
- Very large pages may require more memory
- Some dynamic content may not load properly

## 🌟 Feedback & Suggestions

Have ideas to improve the package or documentation? Open an issue on the [GitHub repository](https://github.com/LpCodes/LP-All-Images-Downloader/issues).

## 📝 Additional Resources

- **Bug Tracker**: [Report Issues](https://github.com/LpCodes/LP-All-Images-Downloader/issues)
- **Source Code**: [GitHub Repository](https://github.com/LpCodes/LP-All-Images-Downloader)
- **Documentation**: [Read the Docs](https://lpimagesdownloader.readthedocs.io/)

---

Thank you for using LP Images Downloader! Your feedback helps make this project better. 😊