Как скачать целую ветку форума 4pda и скормить нейросети?

В особо развитых ветках 4pda очень сложно ориентироваться, многие выводы можно сформулировать только прочитав 100+ страниц. При этом многое пропускается и незамечается. Как скопировать ветку или несколько веток связанных с определёнными темами, чтобы потом с помощью нейросети (chatgpt/gemini/claude) составить полную картину?
  • Вопрос задан
  • 646 просмотров
Решения вопроса 1
@rPman
4pda основан на ip.board, все загружается без танцев с бубном, только осторожно, без авторизации получаются другие страницы чуть в ином формате. Вот пример кода на основе simple_html_dom:
<?php
include('simple_html_dom.php');

// ссылка на первую страницу темы
define('START_URL','https://4pda.to/forum/index.php?showtopic=1084129');
// количество страниц &st= из ссылки » в навигаторе по страницам
define('PAGES_CNT',580);

@mkdir('data');

for($i=0;$i<=PAGES_CNT;$i+=20)
{
	// формируем url
	$url=START_URL.($i==0?'':'&st='.$i);
	// имя кеш файла чтобы не загружать повторно
	$cache_fn='data/'.md5(START_URL).'.'.$i.'.html';
	if(!file_exists($cache_fn))
	{
		// Загружаем страницу
		$data=file_get_contents($url);
		// сохраняем страницу в кеше
		file_put_contents($cache_fn,$data);
		// пауза между запросами к серверу для защиты его от ddos
		sleep(1);
	} else
	{
		// читаем из кеша
		$data=file_get_contents($cache_fn);
	}

	$html=str_get_html($data);
	$num=0;
	foreach($html->find('div[class]:not([class=""]') as $post)
	{ // перебираем посты в теме
		// пропускаем первый пост темы, он дублируется на каждой странице
		if($num++==0) continue;
		// выводим пост на экран
		$post_html=$post->find('div.post_body',0)->text();
		echo $post_html.PHP_EOL;
	}
	// вставляем разделитель между постами
	echo '<hr/>'.PHP_EOL;
	$html->clear();
}
?>

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

Страницы можешь вручную указать for($i=0;$i<=PAGES_CNT;$i+=20) вместо 0 - начальный (с шагом 20) и PAGES_CNT конечный пост.

Вместо текстового представления $post_html=$post->find('div.post_body',0)->text(); можешь сложнее структуру сообщения анализировать, выявляя цитирования и к примеру исключая их из текста (они занимают большую часть всего, дублируя многократно информацию).

Конкретно этот пример не влезет в контекстное окно бесплатного claude - это 70к токенов. Поэтому дели на куски.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы