From 29c407d1e0d8fe06fb4d25f9f23f6aacc7fcd34f Mon Sep 17 00:00:00 2001 From: Tobi Dotcom <121991626+tobidotcom@users.noreply.github.com> Date: Mon, 1 Apr 2024 22:11:37 +0200 Subject: [PATCH 1/2] Added Dev Container Folder --- .devcontainer/devcontainer.json | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..ff35faf --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,33 @@ +{ + "name": "Python 3", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/python:1-3.11-bullseye", + "customizations": { + "codespaces": { + "openFiles": [ + "README.md", + "examples/streamlit_medium_writer_chat/app.py" + ] + }, + "vscode": { + "settings": {}, + "extensions": [ + "ms-python.python", + "ms-python.vscode-pylance" + ] + } + }, + "updateContentCommand": "[ -f packages.txt ] && sudo apt update && sudo apt upgrade -y && sudo xargs apt install -y Date: Tue, 2 Apr 2024 22:43:50 +0000 Subject: [PATCH 2/2] Developed SimpleCrawler - an Ethical Crawler with several features --- .devcontainer/devcontainer.json | 33 ------------ SimpleCrawler/.dockerfile | 14 +++++ SimpleCrawler/.license | 21 ++++++++ SimpleCrawler/README.md | 54 +++++++++++++++++++ SimpleCrawler/app.py | 89 ++++++++++++++++++++++++++++++++ SimpleCrawler/requirements.txt | Bin 0 -> 308 bytes 6 files changed, 178 insertions(+), 33 deletions(-) delete mode 100644 .devcontainer/devcontainer.json create mode 100644 SimpleCrawler/.dockerfile create mode 100644 SimpleCrawler/.license create mode 100644 SimpleCrawler/README.md create mode 100644 SimpleCrawler/app.py create mode 100644 SimpleCrawler/requirements.txt diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index ff35faf..0000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "Python 3", - // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile - "image": "mcr.microsoft.com/devcontainers/python:1-3.11-bullseye", - "customizations": { - "codespaces": { - "openFiles": [ - "README.md", - "examples/streamlit_medium_writer_chat/app.py" - ] - }, - "vscode": { - "settings": {}, - "extensions": [ - "ms-python.python", - "ms-python.vscode-pylance" - ] - } - }, - "updateContentCommand": "[ -f packages.txt ] && sudo apt update && sudo apt upgrade -y && sudo xargs apt install -y self.max_depth: + return + with self.lock: # Acquire lock before modifying the set + if url in self.visited: + return + self.visited.add(url) + logging.info(f"Scraping {url}") + + try: + response = self.session.get(url) + response.raise_for_status() + + soup = BeautifulSoup(response.text, 'html.parser') + plain_text = soup.get_text(separator='\n', strip=True) + logging.debug(f"Content from {url}:\n{plain_text}\n") # Changed to debug level + + links = [urljoin(url, link['href']) for link in soup.find_all('a', href=True)] + links = [link for link in links if link not in self.visited] # Removed redundant urljoin + + with ThreadPoolExecutor(max_workers=self.max_threads) as executor: + futures = [executor.submit(self.scrape_website, link, depth + 1) for link in links] + for future in futures: + future.result() + + except RequestException as e: + logging.error(f"An error occurred while scraping {url}: {e}") + +def main(): + start_url = 'https://developers.codegpt.co/' # Replace with your target URL + crawler = SimpleCrawler(start_url, max_depth=3, max_threads=10) + crawler.scrape_website(start_url) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/SimpleCrawler/requirements.txt b/SimpleCrawler/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..807edaead20892d5548d875a8d9aa643a4f6a5c5 GIT binary patch literal 308 zcmX|++YW*-5CzY(iJzk3rf+@>N)054SinR-UY%XQH0>tc>FnwEb5>BPNuwHFsjUXx zsl5uFScUdVm2u|UYNHE$T