Вопрос по curl в php
1594 сообщения
#15 лет назад
Блин, сейчас столкнулся со следующей проблемой.Парсер объявлений с сайта.
Парсер (даже не парсер, а только curl-запрос) возвращает ВСЮ страницу КРОМЕ... объявлений...
Как это понимать?!
327 сообщений
#15 лет назад
Вероятно объявления формируются как-то особо. AJAX-ом или в iframe подгружаются или ещё что.
578 сообщений
#15 лет назад
Да уж, так часто бывает )).. в этом то и специфика задач импорта внешнего неподготовленного контента.. адресок сайта скажите.
1594 сообщения
#15 лет назад
Не iframe точно =)Самое интересное, что с аналогичного сайта (irr.ru) спарсилось без проблем
1410 сообщений
#15 лет назад
Цитата ("Anexroid"):Не iframe точно =)
Самое интересное, что с аналогичного сайта (irr.ru) спарсилось без проблем
Если не выбрать регион, то там ничего и нету

1410 сообщений
#15 лет назад
Цитата ("Anexroid"):Передаёт. В cookie.
Видимо не передает, или неправильно передает, если возвращается страница без объявлений.
578 сообщений
#15 лет назад
Все оч просто )). и дело и вправду в куках.в броузере выберите очистку всех куков. далее прямо перейдите по искомому урлу ссылка.
всплывет затенение с выбором региона. нажмите на клаве ESC - затенение пропадет а на странице вы как раз увидете все так, как и парсится курлом.
--
вывод: идите курлом на заглавную. и далее по всем ссылочкам до искомой, как буд-то человек. все куки сохраняйте в процессе.
1594 сообщения
1594 сообщения
1594 сообщения
#15 лет назад
Блин, я с этим AJAX уже всю голову сломал.В index.html:
<script>
var xmlHttp = false;
function start(){
//"включаем" картинку загрузки
document.getElementById('progressbar').innerHTML = '<img src="./images/ajax-loader.gif" border="0" alt="Loading, please wait..." />';
//инициализация ajax
try{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch (e){
try{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch (e2) {
xmlHttp = false;
}
}
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
}
//открываем страницу parser.php
xmlHttp.open("POST", 'parser.php', true);
//Устанавливаем заголовок - говорим, что это форма
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//задаём функцию-обработчик результата
xmlHttp.onreadystatechange = parseResult;
//отправляем запрос
}
function parseResult(){
xmlHttp.onreadystatechange = function(){
if (xmlHttp.readyState==4){
document.getElementById('progressbar').innerHTML = 'Завершено.<br />'+xmlHttp.responseText;
}
}
}
</script>
.......
<div id="progressbar"></div>
<input type="button" value="Начать" onclick="start()" />
parser.php - собственно сам парсер.
После каждой страницы он сохраняет в файл текущий номер страницы и при повторном запуске продолжает с той страницы, которая записана. +Просто текстом выдаёт "Parsing page complete" и ошибки (в случае возникновения)
Вопрос: Как сделать, чтобы Вот эти "Parsing page..." и ошибки в index.html выдавались "по мере поступления", а не после полного выполнения скрипта?
1594 сообщения
#15 лет назад
И, плюс, допустим в настройках стоит - 10 страниц спарсить надо за один запуск.Как мне автоматически, через тот же АЯКС, запускать и запускать скрипт пока не спарсится всё?
(exec() в php не предлагать, не работает он =))
Подойдёт ли такой вариант?
function parseResult(){
xmlHttp.onreadystatechange = function(){
if (xmlHttp.readyState==4){
document.getElementById('progressbar'

start; //Я не знаю как правильно запустить функцию start
}
}
}
Оффтопик
Хорошее дело - парсеры. В принципе, ничего сложного, а спросом пользуется =)
578 сообщений
#15 лет назад
Цитата ("Anexroid"):: Как сделать, чтобы Вот эти "Parsing page..." и ошибки в index.html выдавались "по мере поступления", а не после полного выполнения скрипта?
хмм... ну во первых сам parser.php должен выдавать по завершении сеанса фразу "Parsing page complete", а во вторых в 32й строке оставьте такое
document.getElementById('progressbar').innerHTML = xmlHttp.responseText;
----------------------------------
Цитата ("Anexroid"):
Как мне автоматически, через тот же АЯКСпосле 32й строки добавьте запуск функи start() по таймеру..
кстати, когда оно запустится, ваше сообщение о том что мол спарсена такая-то страница будет затерто картинкой. чтобы этого не происходило закоментируйте в коде строку 6.
578 сообщений
#15 лет назад
Цитата ("Anexroid"):В принципе, ничего сложного, а спросом пользуется =)глубоко ошибаетесь.. бывают сложные варианты, особенно в биллинговых системах, в соц сетях. бывает например что никаких GET запросов, даже обычные ссылки <a href''> ссылаются на '#', а нажатие на них обрабатывается каким нибудь doPostBack() (как неапример в кабинете пользователя билайн).. а магазины иногда грешат неоднородностью структуры и вообще специально зашумляют вывод чтоб затруднить составление regexp..
--------------
но по стоимости килограмм кода грабера, простого парсера и например модуля цмски соотностятся думаю как 2.5 : 1.5 : 1
--------------
если вы решили всерьез влиться в нашу маленькую подотрасль главное не демпингуйте сильно.. измеряйте цену примерно как (30 * D) + (15 * N) + (20|40) + (20|40) $, где D - глубина основного цикла в котором происходит внешний запрос (то есть если надо пробежать по ссылкам с 1й страницы некоего ресурса - это D=1 и цена 30, а если нужно перебрать 10 страниц и на каждой по 10 ссылок, и по ним прробежать - то это D=2 и цена 60), N - количество шагов, ведущих к основному циклу (то есть например запрос1 - авторизовались, запрос2 - открыли форму поиска, запрос3 - произвели поиск, запрос4 - отсортировали резалты и перешли к перебору линок и грабу их - соотв N = 4), (20|40) - это доплата за сохранение в файлы и в СУБД соответственно, (20|40) - вторая доплата - соответсвтенно за сохраннеие в формате типа csv и сохраннеие в специфическом формате - напр. шопскрипт)..
-------------- естественно это справделивая цена, конечно приджется и ниже опускать планку - ну главное хотя бы не на порядок, а то некоторые за 10 готовы делать - срывают наш (с группой еще нескольких активистов) картельный сговор )))
1594 сообщения
#15 лет назад
Ок, формулу записал на листочек и приклеил к монитору =)Пока на WebLancer'е заказы не беру, набиваю портфолио по теме у оффлайновых заказчиков =)
578 сообщений
#15 лет назад
Цитата ("Anexroid"):формулу записал на листочек и приклеил к мониторунаизусть, наизусть надо знать, чтоб ночью, в кровати разбудят с фонарем - и спросят - "сколько за грабер категории 4x6 возьмешь" - а вы им не моргнув - "а вот 237$ и коробку хенесси".... )))