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

Все вопросы касающиеся использования
программы можно задать здесь
Ответить
sx000
Сообщения: 12
Зарегистрирован: 08 сен 2009, 17:15

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

Сообщение sx000 » 01 окт 2009, 01:32

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

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

cathderay
Сообщения: 32
Зарегистрирован: 09 апр 2009, 23:05

Сообщение cathderay » 01 окт 2009, 22:26

для регэкспов до посинения изучаем 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);
}
Извлечь "Название статьи" будем Вам Домашним заданием

Аватара пользователя
Support
Site Admin
Сообщения: 936
Зарегистрирован: 10 апр 2009, 17:45
Контактная информация:

Сообщение Support » 02 окт 2009, 13:02

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

chaynik
Сообщения: 10
Зарегистрирован: 02 ноя 2009, 23:20
Контактная информация:

Сообщение chaynik » 02 дек 2009, 00:36

Можно так, взять заголовок.

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

preg_match("/<div class=\"title\">(.|\n)*?<\/div>/i", $html, $m1);
preg_match("/<h2>.*?<\/h2>/i", $m1[0], $m2);
$zagolovok=strip_tags($m2[0]);
Рубишь бабло, поделись с другими, но нераспростроняйся в сети.

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 2642
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Сообщение bigfozzy » 03 дек 2009, 18:33

также есть команды:

$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);

Ответить