Спарсить темы с форуме

Рейтинг: 0Ответов: 1Опубликовано: 26.04.2023

Всем привет! Я пытаюсь спарсить темы с форума: http://liveingryffindor.forum24.ru/

Когда я пишу такой код, чтобы получить открытые темы, все работает хорошо:

from bs4 import BeautifulSoup

# Адрес страницы форума
url = "http://liveingryffindor.forum24.ru/?1-2-0-00000026-000-10001-0"

# Получаем HTML-код страницы форума
response = requests.get(url)

# Создаем объект BeautifulSoup из HTML-кода
soup = BeautifulSoup(response.text, "html.parser")

# Находим все элементы div с классом "post"
posts = soup.find_all(class_=lambda x: x in ["font3", "font1"])

with open("forum_posts.txt", "w", encoding="utf-8") as file:
    for post in posts:
        text = post.get_text()
        file.write(text + "\n")

Скриншот результата:

скриншот

Затем я пытаюсь получить закрытые темы с помощью своего логина и пароля:

import requests
from bs4 import BeautifulSoup

# Логин и пароль на форуме
username = "******"
password = "******"

# Адрес страницы авторизации
login_url = "http://liveingryffindor.forum24.ru/"

# Адрес страницы закрытой темы, которую необходимо спарсить
closed_topic_url = "http://liveingryffindor.forum24.ru/?1-8-0-00000008-000-0-0-1382282553"

# Создаем сессию для авторизации
session = requests.Session()

# Отправляем POST запрос с логином и паролем на страницу авторизации
login_data = {"nick: ": username, "pass ": password}
session.post(login_url, data=login_data)

# Получаем HTML-код закрытой темы
response = session.get(closed_topic_url)

# Создаем объект BeautifulSoup из HTML-кода
soup = BeautifulSoup(response.text, "html.parser")

# Находим все элементы div с классом "post"
posts = soup.find_all(class_=lambda x: x in ["font3", "font1"])

# Сохраняем текст в файл
with open("closed_topic2.txt", "w", encoding="utf-8") as file:
    for post in posts:
        text = post.get_text()
        file.write(text + "\n")

Результат выходит такой:

   пароль: 
 

 - зарегистрироваться, я новый участник
 - я забыл пароль, прошу выслать на е-майл

Текста там нет. Помогите, пожалуйста, решить проблему

Ответы

▲ 1Принят

Попробовал запустить ваш код. Вот несколько нюансов.

  1. {"nick: ": username, "pass ": password} - неправильно указали данные.

Самый простой способ проверить какие данные отправляются в запросе - проверить в инструментах разработчика.

Открываем Network и вводим данные, отправляем форму. Результат: Отправленные данные

Заполняем данные правильно:

login_data = {"nick": username, "pass": password}
  1. Элементы которые вы пытаетесь найти на странице не существуют, поэтому файл либо остается пустым, либо вы получаете неверные данные.
posts = soup.find_all(class_=lambda x: x in ["font3", "font1"])
print(posts)

Вывод: []

введите сюда описание изображения

  1. Страница выполнена ужасно, неадекватное использование скриптов, кодировок и прочего. (Не пригодно для парсинга)