Написал небольшой скрипт который парсит похожие сайты с SimilarWeb: Запускаем скрипт, пишем домен, с которого хотим собрать похожие сайты Скрипт запускает браузер, открывает симиларвеб и парсит домены: Далее скрипт каждый спаршенный домен автоматически подставляет в симиларвеб и парсит похожие по нему. То есть парсинг длится бесконечно, но рано или поздно изначальная тематика уйдёт, поэтому рекомендую следить время от времени за процессом парсинга. Спаршенные домены сохраняются в текстовый файл results.txt, который создается в папке (папка так же создается при каждом запуске скрипта). Для работы скрипт использует драйвер chrome, то есть на вашем компьютере должен быть установлен какой-нибудь браузеров на хром-движке. Это всё сделано для того чтобы имитировать действия реального человека и обходить защиту от парсинга. Сам скрипт: Code: from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service from bs4 import BeautifulSoup import os from datetime import datetime import time def create_output_folder(): folder_name = datetime.now().strftime("%Y_%m_%d-%H_%M_%S") os.makedirs(folder_name, exist_ok=True) return folder_name def write_to_file(folder, filename, data): with open(os.path.join(folder, filename), 'a') as f: f.write(data + "\n") def process_domain(domain, chrome_options): driver = webdriver.Chrome(options=chrome_options) driver.set_page_load_timeout(30) try: driver.get(f'https://www.similarweb.com/website/{domain}/') time.sleep(10) soup = BeautifulSoup(driver.page_source, 'html.parser') div = soup.find('div', {'class': 'wa-competitors__list'}) domains = [] if div is not None: for span in div.findAll('span', {'class': 'wa-competitors__list-item-title'}): domains.append(span.text.strip()) print(f"Данные домена {domain} успешно обработаны.") return domains except Exception as e: print(f"Ошибка обработки домена {domain}: {e}") finally: driver.quit() return [] def main(): output_folder = create_output_folder() chrome_options = Options() processed_domains = set() initial_domain = input("Введите домен для обработки: ") domains_to_process = [initial_domain] while domains_to_process: domain = domains_to_process.pop() if domain not in processed_domains: processed_domains.add(domain) for new_domain in process_domain(domain, chrome_options): write_to_file(output_folder, "results.txt", new_domain) domains_to_process.append(new_domain) print("Все данные были успешно сохранены.") if __name__ == "__main__": main() Если кому-то как-то надо дополнить - пишите. Так же могу написать простенькие скрипты, не только для парсинга. Обращайтесь.
Я тоже писал, но на PHP, потом они поставили CF, и все, только с браузером теперь. Ты не разбирался, как обходить?
мне стало лень искать обходы, решил на таком простом решении остановиться. для себя потом добавил проверку на Audience Interests и Technology Stack. на днях планирую поковырять решение без браузера, отпишусь в теме, если получится что-то