agens / CompetitorTrackingAgent /tools /WebScrapingTool.py
varun324242's picture
Upload folder using huggingface_hub
3b6d7db verified
Raw
History Blame Contribute Delete
1.86 kB
from agency_swarm.tools import BaseTool
from pydantic import Field
import requests
from bs4 import BeautifulSoup
import time
class WebScrapingTool(BaseTool):
"""
This tool utilizes web scraping libraries such as BeautifulSoup to extract data from competitor websites.
It handles HTTP requests, parses HTML content, and extracts relevant information based on specified criteria.
The tool also manages errors and respects website crawling policies.
"""
url: str = Field(
..., description="The URL of the website to scrape."
)
element: str = Field(
..., description="The HTML element to extract data from (e.g., 'div', 'span')."
)
class_name: str = Field(
..., description="The class name of the HTML element to target for data extraction."
)
def run(self):
"""
Extracts data from the specified website URL.
Handles HTTP requests, parses HTML content, and extracts relevant information.
"""
try:
# Respect website crawling policies by including a delay
time.sleep(1)
# Send HTTP request to the specified URL
response = requests.get(self.url)
response.raise_for_status()
# Parse HTML content using BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')
# Extract relevant information based on specified criteria
extracted_data = []
for element in soup.find_all(self.element, class_=self.class_name):
extracted_data.append(element.get_text(strip=True))
return extracted_data
except requests.exceptions.RequestException as e:
return f"Error during HTTP request: {e}"
except Exception as e:
return f"An error occurred during web scraping: {e}"