ScrapeGen
ScrapeGen 🚀 is a powerful Python library that combines web scraping with AI-driven data extraction to collect and structure information from websites efficiently. It leverages Google's Gemini models for intelligent data processing and provides a flexible, configurable framework for web scraping operations.
✨ Features
- 🤖 AI-Powered Data Extraction: Utilizes Google's Gemini models for intelligent parsing
- ⚙️ Configurable Web Scraping: Supports depth control and flexible extraction rules
- 📊 Structured Data Modeling: Uses Pydantic for well-defined data structures
- 🛡️ Robust Error Handling: Implements retry mechanisms and detailed error reporting
- 🔧 Customizable Scraping Configurations: Adjust settings dynamically based on needs
- 🌐 Comprehensive URL Handling: Supports both relative and absolute URLs
- 📦 Modular Architecture: Ensures clear separation of concerns for maintainability
📥 Installation
pip install scrapegen
📌 Requirements
- Python 3.7+
- Google API Key (for Gemini models)
- Required Python packages:
- requests
- beautifulsoup4
- langchain
- langchain-google-genai
- pydantic
🚀 Quick Start with Custom Prompts
from scrapegen import ScrapeGen, CompanyInfo, CompaniesInfo
# Initialize ScrapeGen with your Google API key
scraper = ScrapeGen(api_key="your-google-api-key", model="gemini-1.5-pro")
# Define target URL and custom prompt
url = "https://example.com"
custom_prompt = """
Analyze the website content and extract:
- Company name
- Core technologies
- Industry focus areas
- Key product features
"""
# Scrape with custom prompt and model
companies_data = scraper.scrape(
url=url,
prompt=custom_prompt,
base_model=CompaniesInfo
)
# Display extracted data
for company in companies_data.companies:
print(f"🏢 {company.company_name}")
print(f"🔧 Technologies: {', '.join(company.core_technologies)}")
print(f"📈 Focus Areas: {', '.join(company.industry_focus)}")
⚙️ Configuration
🔹 ScrapeConfig Options
from scrapegen import ScrapeConfig
config = ScrapeConfig(
max_pages=20, # Max pages to scrape per depth level
max_subpages=2, # Max subpages to scrape per page
max_depth=1, # Max depth to follow links
timeout=30, # Request timeout in seconds
retries=3, # Number of retry attempts
user_agent="Mozilla/5.0 (compatible; ScrapeGen/1.0)",
headers=None # Additional HTTP headers
)
🔄 Updating Configuration
scraper = ScrapeGen(api_key="your-api-key", model="gemini-1.5-pro", config=config , verbose=False)
# Dynamically update configuration
scraper.update_config(max_pages=30, timeout=45)
📌 Custom Data Models
Define Pydantic models to structure extracted data:
from pydantic import BaseModel
from typing import Optional, List
class CustomDataModel(BaseModel):
title: str
description: Optional[str]
date: str
tags: List[str]
class CustomDataCollection(BaseModel):
items: List[CustomDataModel]
# Scrape using the custom model
data = scraper.scrape(url, CustomDataCollection)
🤖 Supported Gemini Models
- gemini-1.5-flash-8b
- gemini-1.5-pro
- gemini-2.0-flash-exp
- gemini-1.5-flash
🆕 Custom Prompt Engineering Guide
1️⃣ Basic Prompt Structure
basic_prompt = """
Extract the following details from the content:
- Company name
- Founding year
- Headquarters location
- Main products/services
"""
2️⃣ Tech-Focused Extraction
tech_prompt = """
Identify and categorize technologies mentioned in the content:
1. AI/ML Technologies
2. Cloud Infrastructure
3. Data Analytics Tools
4. Cybersecurity Solutions
Include version numbers and implementation details where available.
"""
3️⃣ Multi-Level Extraction
multi_level_prompt = """
Perform hierarchical extraction:
1. Company Overview:
- Name
- Mission statement
- Key executives
2. Technical Capabilities:
- Core technologies
- Development stack
- Infrastructure
3. Market Position:
- Competitors
- Market share
- Growth metrics
"""
📌 Specialized Prompt Examples
🔍 Competitive Analysis Prompt
competitor_prompt = """
Identify and compare key competitors:
- Competitor names
- Feature differentiators
- Pricing models
- Market positioning
Output as a comparison table with relative strengths.
"""
🌱 Sustainability Focused Prompt
green_prompt = """
Extract environmental sustainability information:
1. Green initiatives
2. Carbon reduction targets
3. Eco-friendly technologies
4. Sustainability certifications
5. Renewable energy usage
Prioritize quantitative metrics and timelines.
"""
💡 Innovation Tracking Prompt
innovation_prompt = """
Analyze R&D activities and innovations:
- Recent patents filed
- Research partnerships
- New product launches (last 24 months)
- Technology breakthroughs
- Investment in R&D (% of revenue)
"""
🛠️ Prompt Optimization Tips
-
Be Specific: Clearly define required fields and formats
"Format output as JSON with 'company_name', 'employees', 'revenue' keys" -
Add Context:
"Analyze content from CEO interviews for strategic priorities" -
Define Output Structure:
"Categorize findings under 'basic_info', 'tech_stack', 'growth_metrics'" -
Set Priorities:
"Focus on technical specifications over marketing content"
⚠️ Error Handling
ScrapeGen provides specific exception classes for detailed error handling:
- ❗ ScrapeGenError: Base exception class
- ⚙️ ConfigurationError: Errors related to scraper configuration
- 🕷️ ScrapingError: Issues encountered during web scraping
- 🔍 ExtractionError: Problems with AI-driven data extraction
Example usage:
try:
data = scraper.scrape(
url=url,
prompt=complex_prompt,
base_model=MarketAnalysis
)
except ExtractionError as e:
print(f"🔍 Extraction failed with custom prompt: {e}")
print(f"🧠 Prompt used: {complex_prompt}")
except ScrapingError as e:
print(f"🌐 Scraping error: {str(e)}")
🏗️ Architecture
ScrapeGen follows a modular design for scalability and maintainability:
- 🕷️ WebsiteScraper: Handles core web scraping logic
- 📑 InfoExtractorAi: Performs AI-driven content extraction
- 🤖 LlmManager: Manages interactions with language models
- 🔗 UrlParser: Parses and normalizes URLs
- 📥 ContentExtractor: Extracts structured data from HTML elements
✅ Best Practices
1️⃣ Rate Limiting
- ⏳ Use delays between requests
- 📜 Respect robots.txt guidelines
- ⚖️ Configure max_pages and max_depth responsibly
2️⃣ Error Handling
- 🔄 Wrap scraping operations in try-except blocks
- 📋 Implement proper logging for debugging
- 🔁 Handle network timeouts and retries effectively
3️⃣ Resource Management
- 🖥️ Monitor memory usage for large-scale operations
- 📚 Implement pagination for large datasets
- ⏱️ Adjust timeout settings based on expected response times
🤝 Contributing
Contributions are welcome! 🎉 Feel free to submit a Pull Request to improve ScrapeGen.
✨ Features
- 🤖 AI-Powered Data Extraction: Utilizes Google's Gemini models for intelligent parsing.
- ⚙️ Configurable Web Scraping: Supports depth control and flexible extraction rules.
- 📊 Structured Data Modeling: Uses Pydantic for well-defined data structures.
- 🛡️ Robust Error Handling: Implements retry mechanisms and detailed error reporting.
- 🔧 Customizable Scraping Configurations: Adjust settings dynamically based on needs.
- 🌐 Comprehensive URL Handling: Supports both relative and absolute URLs.
- 📦 Modular Architecture: Ensures clear separation of concerns for maintainability.
📥 Installation
pip install scrapegen # Package name may vary
📌 Requirements
- Python 3.7+
- Google API Key (for Gemini models)
- Required Python packages:
- requests
- beautifulsoup4
- langchain
- langchain-google-genai
- pydantic
🚀 Quick Start
from scrapegen import ScrapeGen, CompanyInfo, CompaniesInfo
# Initialize ScrapeGen with your Google API key
scraper = ScrapeGen(api_key="your-google-api-key", model="gemini-1.5-pro")
# Define the target URL
url = "https://example.com"
# Scrape and extract company information
companies_data = scraper.scrape(url, CompaniesInfo)
# Display extracted data
for company in companies_data.companies:
print(f"🏢 Company Name: {company.company_name}")
print(f"📄 Description: {company.company_description}")
⚙️ Configuration
🔹 ScrapeConfig Options
from scrapegen import ScrapeConfig
config = ScrapeConfig(
max_pages=20, # Max pages to scrape per depth level
max_subpages=2, # Max subpages to scrape per page
max_depth=1, # Max depth to follow links
timeout=30, # Request timeout in seconds
retries=3, # Number of retry attempts
user_agent="Mozilla/5.0 (compatible; ScrapeGen/1.0)",
headers=None # Additional HTTP headers
)
🔄 Updating Configuration
scraper = ScrapeGen(api_key="your-api-key", model="gemini-1.5-pro", config=config)
# Dynamically update configuration
scraper.update_config(max_pages=30, timeout=45)
📌 Custom Data Models
Define Pydantic models to structure extracted data:
from pydantic import BaseModel
from typing import Optional, List
class CustomDataModel(BaseModel):
title: str
description: Optional[str]
date: str
tags: List[str]
class CustomDataCollection(BaseModel):
items: List[CustomDataModel]
# Scrape using the custom model
data = scraper.scrape(url, CustomDataCollection)
🤖 Supported Gemini Models
- gemini-1.5-flash-8b
- gemini-1.5-pro
- gemini-2.0-flash-exp
- gemini-1.5-flash
⚠️ Error Handling
ScrapeGen provides specific exception classes for detailed error handling:
- ❗ ScrapeGenError: Base exception class.
- ⚙️ ConfigurationError: Errors related to scraper configuration.
- 🕷️ ScrapingError: Issues encountered during web scraping.
- 🔍 ExtractionError: Problems with AI-driven data extraction.
Example usage:
try:
data = scraper.scrape(url, CustomDataCollection)
except ConfigurationError as e:
print(f"⚙️ Configuration error: {e}")
except ScrapingError as e:
print(f"🕷️ Scraping error: {e}")
except ExtractionError as e:
print(f"🔍 Extraction error: {e}")
🏗️ Architecture
ScrapeGen follows a modular design for scalability and maintainability:
- 🕷️ WebsiteScraper: Handles core web scraping logic.
- 📑 InfoExtractorAi: Performs AI-driven content extraction.
- 🤖 LlmManager: Manages interactions with language models.
- 🔗 UrlParser: Parses and normalizes URLs.
- 📥 ContentExtractor: Extracts structured data from HTML elements.
✅ Best Practices
1️⃣ Rate Limiting
- ⏳ Use delays between requests.
- 📜 Respect robots.txt guidelines.
- ⚖️ Configure max_pages and max_depth responsibly.
2️⃣ Error Handling
- 🔄 Wrap scraping operations in try-except blocks.
- 📋 Implement proper logging for debugging.
- 🔁 Handle network timeouts and retries effectively.
3️⃣ Resource Management
- 🖥️ Monitor memory usage for large-scale operations.
- 📚 Implement pagination for large datasets.
- ⏱️ Adjust timeout settings based on expected response times.
🤝 Contributing
Contributions are welcome! 🎉 Feel free to submit a Pull Request to improve ScrapeGen.
Metadata
Release files for scrapegen 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| scrapegen-0.1.3.tar.gz | 37.3 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| scrapegen-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 82.0 kB
Release files / scrapegen-0.1.3.tar.gz
| Download URL | scrapegen-0.1.3.tar.gz |
|---|---|
| Size | 37.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
29a7cf6f31fcbcc2227ddd226749da9e796d2275a6de09bb65af0b63dc8acf54
|
|
BLAKE2b-256 checksum How to use checksums |
5cd5e459f335b917bf384825f3c454a776d314a9e18ad6b53db292e2563ea93d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.11.5
|
Release files / scrapegen-0.1.3-py3-none-any.whl
| Download URL | scrapegen-0.1.3-py3-none-any.whl |
|---|---|
| Size | 44.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e26521de990bf702860ef3cd43bfc184125cc11a53474abcd7cd3fce67ca0c8a
|
|
BLAKE2b-256 checksum How to use checksums |
c856ce7d23b0f99bcc205e915f2c1687b345a7fb2bc73ca2c0a5e9351009266c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.11.5
|
Security for scrapegen 0.1.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.