Страница 1 из 1

Помогите сделать парсинг стайта

Добавлено: 01 окт 2009, 01:32
sx000
Привет всем!
В общем то imacros напичкан прям таки уроками о том как извлекать данные из страницы и записывать их в файлы ... хуман отнюдь не сильно удивляет такими уроками. Девиз компании, Не надо знать php ... ну как бы не так господа. В общем в связи с этим предлагаю сделать полноценный урок по выпарсиванию текстов из стайтов.

Дано сайт:
http://www.billdwhite.com/wordpress/
посты постраничный
p=1....
Задача выдрать текст с каждой страницы:
Название статьи (не путать с тайтлом)
Далее сам текст статьи
Разграничить их каким то разделителем, пусть это будет
--------------
И записать каждую статью в файл txt.
И так сколько стаетй столько и файлов соотвествено.
Вот простите меня но все люди кторые покупают не думаю что они боги в регепсах и им нужны такие уроки пусть даже на закрытом форуме. Пожалуйста сделайте и расскажите как грамотно на примерах парсить регепсами. Да можно отправить читать мануал, но думаю что стоит все таки тут такой урок вывести.

Добавлено: 01 окт 2009, 22:26
cathderay
для регэкспов до посинения изучаем http://www.php.ru/manual/ref.pcre.html
несколько десятков часов жизни надо потратить, да. :D
по-другому не получится :shock:

Код: Выделить всё


ini_set("max_execution_time","0");
ini_set("display_errors","on");

/*
делаем по ленивому: смотрим последний пост http://www.billdwhite.com/wordpress/?p=231
предполагаем что существуют 231 пост
тупо обходим их в цикле

*/

for($i=230; $i<232; $i++) {
	$url = "http://www.billdwhite.com/wordpress/?p=".$i;
	print_r($url);
	$html =  getCurlcontent($url);
	//print_r($html);
	/*
	  теперь парсим полезный контент
	*/

	preg_match_all ("~<div class=\"entry\">(.*)<div class=\"pumpkins\">~ism", $html, $m);
	print_r($m[1][0]);
	echo "<hr>";

	/*
	  если всё гут и в $m[1][0] лежит свеже-спиженное	то пишем в файл
	*/
	if(!empty($m[1][0])) {
		write_string($i.".txt", $m[1][0]);
	}

}

function getCurlcontent($url)
{
   $cUrl = curl_init();
   curl_setopt($cUrl, CURLOPT_URL, $url);
   curl_setopt($cUrl, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($cUrl, CURLOPT_TIMEOUT, '3000');
   $pageContent = trim(curl_exec($cUrl));
   curl_close($cUrl);
   return $pageContent;
}


function write_string($filename, $record, $type = "w"){

	$logFile = fopen($filename,$type);
	fwrite($logFile,$record);
	fclose($logFile);
}
Извлечь "Название статьи" будем Вам Домашним заданием

Добавлено: 02 окт 2009, 13:02
Support
В ближайшее время появится функция, облегчающая парсинг.

Добавлено: 02 дек 2009, 00:36
chaynik
Можно так, взять заголовок.

Код: Выделить всё

preg_match("/<div class=\"title\">(.|\n)*?<\/div>/i", $html, $m1);
preg_match("/<h2>.*?<\/h2>/i", $m1[0], $m2);
$zagolovok=strip_tags($m2[0]);

Добавлено: 03 дек 2009, 18:33
bigfozzy
также есть команды:

$webpage->get_body_after_prefix($prefix,$as_html=true);
$webpage->get_body_before_prefix($prefix,$as_html=true);
$webpage->get_body_inter_prefix($prefix1,$prefix2,$as_html=true);
$webpage->get_body_inter_prefix_all($prefix1,$prefix2,$as_html=true,$shift1=0,$shift2=0);