Чтобы извлечь все ссылки с веб-сайта с использованием Python, можно использовать библиотеки, такие как `requests` для получения HTML-кода страниц и `BeautifulSoup` для его парсинга. Также можно использовать библиотеку `urllib` для работы с URL.
Однако стоит отметить, что сканирование веб-сайтов должно проводиться с осторожностью и уважением к правилам `robots.txt`, которые могут ограничивать доступ к определенным частям сайта. Перед тем как сканировать сайт, всегда проверяйте его политику в отношении веб-сканирования.
Вот пример простого скрипта, который будет извлекать ссылки из указанного сайта и его поддоменов:
```python
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin, urlparse
import time
# Функция для получения всех ссылок с заданного URL
def get_all_links(url):
links = set() # Используем множество для уникальности ссылок
try:
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
for a_tag in soup.find_all('a', href=True):
href = a_tag['href']
full_url = urljoin(url, href) # Преобразуем относительные URL в абсолютные
# Проверяем, что ссылка относится к домену
if urlparse(full_url).netloc == urlparse(url).netloc:
links.add(full_url)
except Exception as e:
print(f"Error: {e}")
return links
# Основная функция для запуска сканирования
def crawl_website(start_url, max_depth=2):
visited = set()
to_visit = {start_url}
while to_visit and max_depth > 0:
current_url = to_visit.pop()
if current_url not in visited:
print(f"Crawling: {current_url}")
visited.add(current_url)
links = get_all_links(current_url)
to_visit.update(links - visited) # Добавляем новые ссылки для сканирования
time.sleep(1) # Задержка, чтобы не перегружать сервер
max_depth -= 1
return visited
# Запуск скрипта
if __name__ == "__main__":
start_url = "https://example.com" # Укажите URL сайта
found_links = crawl_website(start_url)
print("\nFound links:")
for link in found_links:
print(link)
```
### Объяснение кода:
1. **get_all_links(url)**: Эта функция получает HTML-код страницы по указанному URL и извлекает все ссылки, проверяя, относятся ли они к тому же домену.
2. **crawl_website(start_url, max_depth=2)**: Основная функция, которая управляет процессом обхода. Она использует множество `visited` для хранения уже посещенных ссылок и множество `to_visit` для ссылок, которые нужно посетить.
3. **time.sleep(1)**: Вставка задержки для предотвращения излишней нагрузки на сервер.
4. **Запуск скрипта**: Задайте начальный URL сайта и запустите скрипт.
### Важное замечание:
- Убедитесь, что вы соблюдаете правила использования сайта.
- Если у сайта есть файл `robots.txt`, проверьте, разрешает ли он обход для ваших целей.