Форум → Программирование → PHP для идиотов → Хуево. Парсинг сайта.
Хуево. Парсинг сайта.
Страницы: ← Следующая страница →
-
возникла необходимость ограбить сайт http://kinomob.info по контенту. Я думал что сложное для меня скачка и написал довнлоадер. Оказалось что самое сложное для меня парсинг ссылок и названия с описаниями. Вот например категория http://kinomob.info/cheats,1,1.htm. мне нужно выудить весь список урлов в таблице, и потом перейти по ссылке и выудить название, описание и ссылку. пытался работать со страничкой как с xml, но код пиздец не валидный. Использовал Tidy, вроде ничего, но ресурсы кушает по страшному. Я решил использовать регулярки, но в них я деревянный, простое могу, а вот страничку не придумаю как. Ткните кто знает пожалуйста.С возвращением, Пiха! hyperoff.ru - качественный хостинг php
-
Июль 12, 2010, 3:34 п.п., спустя 1 час 25 минут 49 секунд
phpQuery тоже загинается на невалидном документе? -
Июль 12, 2010, 3:56 п.п., спустя 22 минуты 16 секунд
Абырвалг, че то первый раз слышу про такое, уже читаю.С возвращением, Пiха! hyperoff.ru - качественный хостинг php -
Июль 12, 2010, 4:03 п.п., спустя 6 минут 32 секунды
довай. Не забудь о резалтах написать, так как мне самому интересно -
Июль 12, 2010, 5:23 п.п., спустя 1 час 20 минут 55 секунд
phpQuery использует XML разборщик и довольно требователен к памяти на больших документах (от 6 метров)
правда работать с селекторами очень удобно после jQuery
по теме - регулярки в путь. -
Июль 12, 2010, 6:20 п.п., спустя 56 минут 52 секунды
Хочешь удобства присущее jQuery - phpQuery. Хочешь простоты, гибкости, головной боли после небольшой смены (типа кавычек) верстки - юзай регулярки.
Но второе еще хорошо тем, что наконец выучишь регулярки хорошоhttps://smappi.org/ - платформа по созданию API на все случаи жизни -
Июль 12, 2010, 6:25 п.п., спустя 5 минут 3 секунды
Наверно для быстроты разработки буду использовать phpQuery. будет время буду с регулярками мучаться. говорят легко, а я на них как баран на новые воротаС возвращением, Пiха! hyperoff.ru - качественный хостинг php -
Июль 12, 2010, 11:40 п.п., спустя 5 часов 14 минут 32 секунды
adw0rd, если тидить документ, то головной боли этой уже не стает :)
другое дело, есть ли у заказчиков тиди, но это уже дело третье)Сапожник без сапог -
Июль 13, 2010, 11:22 д.п., спустя 11 часов 42 минуты 16 секунд
Можно сделать так:<?php
error_reporting(0);
$dom = new DOMDocument();
$file = 'http://kinomob.info/cheats,1,1.htm';
$dom->loadHTMLFile($file);
$table = $dom -> getElementsByTagName('table');
tr = $table -> item(9) -> getElementsByTagName('tr');
$td = $tr -> item(3) -> getElementsByTagName('td');
$a = $td -> item(0) -> getElementsByTagName('a');
$hre= $a ->item(0) -> getAttribute("href") ;
$links[$link]='http://kinomob.info/'.$hre;
echo '<br/>',$links[$link];
?>
Для получения всех ссылок просто поставить цикл со смещением $td = $tr -> item(3) на 1, т.е. 4,5, и т.д.Спустя 121 сек.<?php
error_reporting(0);
$dom = new DOMDocument();
$file = 'http://kinomob.info/cheats,1,1.htm';
$dom->loadHTMLFile($file);
$table = $dom -> getElementsByTagName('table');
$tr = $table -> item(9) -> getElementsByTagName('tr');
$td = $tr -> item(3) -> getElementsByTagName('td');
$a = $td -> item(0) -> getElementsByTagName('a');
$hre= $a ->item(0) -> getAttribute("href") ;
$links[$link]='http://kinomob.info/'.$hre;
echo '<br/>',$links[$link];
?>
Здесь правильно. -
Июль 13, 2010, 5:53 п.п., спустя 6 часов 31 минуту 3 секунды
ога, верстку изменили и песта, лишний элемент вывелся и песта, если уж юзаешь dom пхпшный, для поиска элементов пользуй xpath, куда более гибкие решения позволяет делатьWork, buy, consume, die -
Июль 13, 2010, 6:22 п.п., спустя 28 минут 52 секунды
да dom говорят жрет много, в книге видел даже. сам не знаю.но этот вариант пробовал.С возвращением, Пiха! hyperoff.ru - качественный хостинг php -
Июль 16, 2010, 5:24 д.п., спустя 2 дня 11 часов 2 минуты
я тут curl'ом попробовал…<?php
function getPage ($url, $regx) {
$uagent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_setopt($ch, CURLOPT_USERAGENT, $uagent);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$r = curl_exec($ch);
preg_match_all($regx, $r, $a);
curl_close($ch);
return $a;
}
$url = 'http://kinomob.info/';
$link = $url.'cheats,1,1.htm';
$find = '|(cheat,1,1,)(\d+)(.htm)|sei';
$ftitle = '|<h1>(.+?)</h1>.+(uploads/[^"]+).+|sei';
$mas = getPage($link, $find);
for ($i=0;$i<count($mas[0]);$i++) {
echo $url.$mas[0][$i].'<br />';
$newlink = $url.$mas[0][$i];
$info = getPage($newlink,$ftitle);
echo $info[1][0].'<br />';
echo $url.$info[2][0].'<br /><hr />';
}
?>[/php]
только я не силен в регулярках, вытащил заголовок и картинку… нуна еще описание и форму с кнопкой "скачать"…
вот что мне выводит:
[img]http://j.imagehost.org/0743/000.jpg[/img]Высокоуровневое абстрактное говно -
Июль 16, 2010, 8:34 д.п., спустя 3 часа 9 минут 34 секунды
Stasovsky, for на foreach поменяй , смысл этого
я вобще не понимаю, почему не в одну строку ?$url = 'http://kinomob.info/';
$link = $url.'cheats,1,1.htm'; -
Июль 16, 2010, 1:10 п.п., спустя 4 часа 35 минут 55 секунд
потому что $url дальше использовалась))Высокоуровневое абстрактное говно -
Авг. 20, 2010, 2:57 п.п., спустя 35 дней 1 час 47 минут
Stasovsky, выручай. нужно зайти на страницу и выудить описание с ссылкой на закачку.С возвращением, Пiха! hyperoff.ru - качественный хостинг php
Страницы: ← Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!