Спарсить темы с форуме
Всем привет! Я пытаюсь спарсить темы с форума: 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 шт):
Автор решения: SaNoKProG
→ Ссылка
Попробовал запустить ваш код. Вот несколько нюансов.
{"nick: ": username, "pass ": password}- неправильно указали данные.
Самый простой способ проверить какие данные отправляются в запросе - проверить в инструментах разработчика.
Открываем Network и вводим данные, отправляем форму.
Результат: 
Заполняем данные правильно:
login_data = {"nick": username, "pass": password}
- Элементы которые вы пытаетесь найти на странице не существуют, поэтому файл либо остается пустым, либо вы получаете неверные данные.
posts = soup.find_all(class_=lambda x: x in ["font3", "font1"])
print(posts)
Вывод: []
- Страница выполнена ужасно, неадекватное использование скриптов, кодировок и прочего. (Не пригодно для парсинга)

