LIMB
Вход Регистрация

тема

есть тут кодер? помогите спарсить форум. НУЖНА ПОМОЩЬ С КОДОМ

OBNAL_ · · 3 ответов · 329 просмотров

обещаю выложить все на этот форум если поможете спарсить, плиииз!

короче вот что мне выдал ии:

Code:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import json
import re

def sanitize_filename(name):
    return re.sub(r'[^\w\-_.]', '_', name)

def login(driver):
    driver.get("http://xssforumv3isucukbxhdhwz67hoa5e2voakcfkuieq4ch257vsburuid.onion/")
    print("🧠 Жду, пока ты пройдёшь капчу...")

    try:
        WebDriverWait(driver, 300).until(
            EC.presence_of_element_located((By.NAME, "login"))
        )
        print("✅ Капча пройдена, форма найдена")

        driver.find_element(By.NAME, "login").send_keys("ТВОЙ ЛОГИН")
        driver.find_element(By.NAME, "password").send_keys("ТВОЙ ПАРОЛЬ")
        driver.find_element(By.NAME, "login").submit()
        time.sleep(3)

    except Exception as e:
        print(f"❌ Не удалось найти форму логина: {e}")

from bs4 import BeautifulSoup

import os
import requests
import base64
import mimetypes
from urllib.parse import urljoin, urlparse

def download_thread(driver, topic):
    url = topic["url"]
    thread_id = url.rstrip("/").split("/")[-1]
    folder = f"thread_{thread_id}"
    os.makedirs(folder, exist_ok=True)
    filename = os.path.join(folder, "thread.html")

    print(f"📥 Загружаю тред: {url}")
    driver.get(url)
    time.sleep(3)

    html = driver.page_source

    if "captcha" in html.lower() or "cloudflare" in html.lower():
        print("🛑 Капча обнаружена! Введи её вручную в открытом браузере.")
        input("👉 Нажми Enter, когда капча будет пройдена...")
        html = driver.page_source

    soup = BeautifulSoup(html, "html.parser")
    posts = soup.find_all("div", class_="bbWrapper")

    if not posts:
        print("⚠️ Посты не найдены. Структура страницы могла измениться.")
        return

    for i, post in enumerate(posts):
        for img in post.find_all("img"):
            src = img.get("src")
            if not src:
                continue

            if src.startswith("data:image"):
                try:
                    header, encoded = src.split(",", 1)
                    match = re.match(r'data:image/(.+);base64', header)
                    ext = match.group(1) if match else "png"
                    img_data = base64.b64decode(encoded)
                    img_name = sanitize_filename(f"post{i}_embedded.{ext}")
                    img_path = os.path.join(folder, img_name)

                    with open(img_path, "wb") as f:
                        f.write(img_data)
                    img["src"] = img_name
                    print(f"🧬 Встроенная картинка сохранена: {img_name}")
                except Exception as e:
                    print(f"⚠️ Ошибка при сохранении встроенной картинки: {e}")
                continue

            try:
                img_url = urljoin(url, src)
                ext = os.path.splitext(urlparse(img_url).path)[1]
                if not ext:
                    ext = mimetypes.guess_extension("image/jpeg") or ".jpg"
                img_name = sanitize_filename(f"post{i}_{os.path.basename(urlparse(img_url).path)}")
                img_path = os.path.join(folder, img_name)

                response = requests.get(img_url, timeout=10)
                with open(img_path, "wb") as f:
                    f.write(response.content)
                img["src"] = img_name
                print(f"🖼️ Картинка сохранена: {img_name}")
            except Exception as e:
                print(f"⚠️ Не удалось скачать {src}: {e}")

    with open(filename, "w", encoding="utf-8") as f:
        f.write("<html><body>\n")
        for post in posts:
            f.write(str(post))
            f.write("<hr>\n")
        f.write("</body></html>")
    print(f"✅ Тред сохранён: {filename}")

def process_topics_file():
    options = Options()
    options.headless = False

    # 🔧 Настройки прокси для Tor
    options.set_preference("network.proxy.type", 1)
    options.set_preference("network.proxy.socks", "127.0.0.1")
    options.set_preference("network.proxy.socks_port", 9150)
    options.set_preference("network.proxy.socks_remote_dns", True)

    driver = webdriver.Firefox(options=options)

    login(driver)

    driver.get("https://check.torproject.org/")
    input("🕵️ Проверь в браузере: написано ли 'Congratulations'? Нажми Enter, когда проверишь...")

    with open("topics_Уязвимости_web-приложений.json", "r", encoding="utf-8") as f:
        topics = json.load(f)

    ONION_BASE = "http://xssforumv3isucukbxhdhwz67hoa5e2voakcfkuieq4ch257vsburuid.onion"
    for topic in topics:
        topic["url"] = topic["url"].replace("https://xss.as", ONION_BASE)

    for topic in topics:
        download_thread(driver, topic)
        time.sleep(5)

    driver.quit()


if __name__ == "__main__":
    process_topics_file()

все ворк, но страницы качаются без картинок. 

договорились сделать чтобы было с картинками, он че то наколдовал, и говорит - 

Не удалось прогрузить медиа


Code:
import os
import requests
from urllib.parse import urlparse, parse_qs, urljoin

def download_image(src, base_url, save_path):
    # Если это прокси-ссылка — парсим реальный URL
    if src.startswith("/proxy.php?"):
        try:
            query = urlparse(src).query
            image_url = parse_qs(query).get("image", [None])[0]
            if image_url:
                img_url = image_url
                print(f"🔄 Прямая ссылка извлечена: {img_url}")
            else:
                print(f"⚠️ Не удалось извлечь image URL из: {src}")
                return
        except Exception as e:
            print(f"⚠️ Ошибка при разборе proxy-ссылки: {e}")
            return
    else:
        # Обычная картинка — используем абсолютный путь
        img_url = urljoin(base_url, src)

    try:
        response = requests.get(img_url, timeout=10)
        response.raise_for_status()
        filename = os.path.basename(urlparse(img_url).path)
        filepath = os.path.join(save_path, filename)
        with open(filepath, "wb") as f:
            f.write(response.content)
        print(f"✅ Картинка сохранена: {filename}")
    except Exception as e:
        print(f"⚠️ Ошибка при скачивании {img_url}: {e}")

я прошу прощения, но я не догоняю  заместо чего это вставить, прошу помощи. для меня все это китайский язык. 

дайте пожалуйста ответ конкретный откуда до куда удалить заместо чего вставить это второй кусок. 

СПАСИБО ЗАРАНЕЕ!!!
👍23 😁6 😮3
ОтветOBNAL_

обещаю выложить все на этот форум если поможете спарсить, плиииз! короче вот что мне выдал ии: Code: from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.firefox.options…

Братан, по-моему не в ту тему залил вопрос...
👍3
Попробуй разные инструменты, например, Gemini и GitHub Copilot. Посмотри, какой из них лучше справится именно с твоей задачей по созданию парсера. Иногда удобно генерировать логику в чате с Gemini, а потом вставлять и дорабатывать код с помощью Copilot.

Нужно смотреть, как оформлены типичные статьи на сайте, и, учитывая этот шаблон, редактировать код — это основа основ парсинга, иначе код будет так себе работать.

Гостевой просмотр. Чтобы отвечать и ставить реакции, войдите или зарегистрируйтесь.