Вверх ↑
Этот топик читают: Гость
Ответов: 41
Рейтинг: 3
#1: 2012-01-06 20:48:21 ЛС | профиль | цитата
Добрый вечер!
Подскажите пожалуйста, как можно спарсить страницу, которая сгенерированна JS (взять к примеру даже этот форум)?
Пробовал четырьмя способами...
1.) code_26461.txt
2.) code_26462.txt
3.) code_26463.txt
4.) code_26464.txt
Конечно же я понимаю, что разницы между ними (способами) практически нет, возможно и совсем нет, но всё-же, понятия не имею, как по другому...
Заранее спасибо за помощь
карма: 1

0
файлы: 4code_26461.txt [426B] [116], code_26462.txt [294B] [95], code_26463.txt [545B] [109], code_26464.txt [286B] [103]
Ответов: 5446
Рейтинг: 323
#2: 2012-01-06 20:51:58 ЛС | профиль | цитата
Для конкретно этого форума есть более простой способ общения (ищуший да обряшет ). В общем случае можно попытаться скормить полученную страницу браузеру, и через DOM API работать. Компонентов для DOM в стандартном наборе нет (надо писать IC)
карма: 1

0
Ответов: 1731
Рейтинг: 68
#3: 2012-01-06 20:53:10 ЛС | профиль | цитата
мой вариант не работает.
карма: 1

0
Ответов: 41
Рейтинг: 3
#4: 2012-01-06 21:10:40 ЛС | профиль | цитата
iarspider, данный форум был примером, не более
Cosinus, да-да, вариант с браузером тоже не работает...
Будем надеяться, что есть ещё варианты.
карма: 1

0
Ответов: 8930
Рейтинг: 823
#5: 2012-01-06 21:56:59 ЛС | профиль | цитата
minos, в разделе "Строки" несколько компонентов для поиска в тексте есть, например: code_26465.txt
карма: 19

0
файлы: 1code_26465.txt [1.7KB] [139]
Ответов: 41
Рейтинг: 3
#6: 2012-01-06 22:09:46 ЛС | профиль | цитата
Леонид, эмм, а причём тут поиск? Я же точно такой же пример привел, второй..., только без поиска.
карма: 1

0
Ответов: 1731
Рейтинг: 68
#7: 2012-01-06 22:13:54 ЛС | профиль | цитата
Леонид, ему нужен код страницы после работы JS, но мне кажется, что не получится.
Так как надо этот JS отработать, а WebBrouser отработанный JS в код не выдает.
карма: 1

0
Ответов: 8930
Рейтинг: 823
#8: 2012-01-06 22:18:05 ЛС | профиль | цитата
minos писал(а):
как можно спарсить
А я-то понял: "Как провести синтаксический анализ?"
карма: 19

0
Ответов: 3889
Рейтинг: 362
#9: 2012-01-07 00:54:17 ЛС | профиль | цитата
minos, есть одно оочень извращённое суровое решение, которое я в прошлом году давал tom-it для его конвертора WIKI в CHM, но боюсь, индусы сочтут за национальное оскорбление, страшно публиковать
карма: 1

0
Ответов: 41
Рейтинг: 3
#10: 2012-01-07 02:35:04 ЛС | профиль | цитата
1nd1g0, ну, кхм, в связи с отсутствием абсолютно какого-либо выбора, думаю вас простят
карма: 1

0
Ответов: 3889
Рейтинг: 362
#11: 2012-01-07 03:19:46 ЛС | профиль | цитата
minos, сразу предупреждаю, определение конца отработки всех скриптов - очень и очень непростая задача (фактически на многих сайтах они не прекращают работать до самого закрытия). onProgress тут помогает только косвенно. Но есть пространство для манёвра, например, при большом желании, можно делать свой, внедрённый в страницу скрипт, гарантирующий определение момента отработки жертвы, это уже Ваша забота.


Add(MainForm,5867593,315,175)
{
Height=402
Caption="AJAX2HTML converter"
Position=1
}
Add(WebBrowser,3791675,259,196)
{
Left=1
Top=1
Width=1
Height=1
Enabled=1
URL="http://forum.d2h.ru/"
Silent=0
Point(PHandle)
link(onTitle,5867593:doCaption,[(296,209)(296,181)])
link(onProgress,668003:doCompare,[])
}
Add(Button,929271,210,196)
{
Left=195
Top=215
Align=2
Caption="Reload"
link(onClick,3791675:doNavigate,[])
}
Add(InlineCode,5978023,364,217)
{
WorkPoints=#6:Parsel|
EventPoints=#7:CurText|
DataPoints=#2:ph|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|40:uses kol,Share,Debug,ActiveX,KOLSHDocVw;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|17: ph:THI_Event;|22: CurText:THI_Event;|0:|47: procedure Parsel(var dt:TData; index:word);|0:|5: end;|0:|14:implementation|0:|4:type|31: TKOLWebBrowser = PWebBrowser;|31: PKOLWebBrowser = PWebBrowser;|0:|29:procedure THiAsmClass.Parsel;|16:var pc:PControl;|15: txt:string;|5:begin|36: pc := PControl(ToIntegerEvent(ph));|81: txt := PKOLWebBrowser(pc).OleObject.Document.all.tags('body').Item(0).innerHTML;|26: _hi_OnEvent(CurText,txt);|4:end;|0:|4:end.|
link(CurText,3024381:doText,[])
link(ph,3181004:Var,[])
}
Add(If_else,668003,315,217)
{
Op2=Integer(0)
link(onTrue,5978023:Parsel,[])
}
Add(LineBreak,2660774,273,245)
{
Type=1
link(Data,3791675:PHandle,[])
Primary=[3181004,91,-56]
}
Add(Memo,3024381,413,196)
{
Top=100
Width=392
Height=275
Align=5
ScrollBars=2
}


карма: 1

2
Голосовали:minos, Konst
Ответов: 41
Рейтинг: 3
#12: 2012-01-07 03:45:46 ЛС | профиль | цитата
1nd1g0, опробовал вашу схемку, не работает, но я немного изменил, так, чтобы проверить, и в общем-то...работает, странно конечно, но работает, ну чтож, посмотрим, что я смогу из этого слепить, спасибо вам.

[offtop]То, что вы написали, как-то не очень понятно, похоже на гугл транслейт [/offtop]

P.S.
Ну если у кого-то вдруг есть ещё какие-либо решения данной проблемы, я буду только рад
карма: 1

0
Ответов: 3889
Рейтинг: 362
#13: 2012-01-07 04:12:28 ЛС | профиль | цитата
minos писал(а):
опробовал вашу схемку, не работает, но я немного изменил, так, чтобы проверить, и в общем-то...работает, странно конечно, но работает

Очень сильно зависит от привилегий, настроек и версии браузера IE (32 битной версии), установленного в системе, но работать должно и без изменений, что Вы там такого изменили, что вдруг, к невероятному Вашему удивлению, заработало?
------------ Дoбавленo в 04.12:
minos писал(а):
если у кого-то вдруг есть ещё какие-либо решения данной проблемы, я буду только рад

У меня этих решений было несколько, но самое надёжное я Вам уже предоставил. Ещё с OLEDOM можно работать через WSH, но быстро выяснилось, что там у браузера по умолчанию понижен уровень привилегий и скрипты в страницах заблокированы, равно как и ActiveX. Допускаю, что это решаемо, но лишнего времени экспериментировать пока нет.
карма: 1

0
Ответов: 41
Рейтинг: 3
#14: 2012-01-08 00:29:49 ЛС | профиль | цитата
1nd1g0, да уж неважно что я изменил, как я посмотрел, вы тоже поправили код, теперь он ещё лучше работает
Главное, чтобы этот способ работал всегда и без изменений...
------------ Дoбавленo в 00.29:
Попробовал сделать, всё работает, но когда попробовал несколько страниц спарсить, то это печально закончилось, какой-то там прогресс уж оочень чувствительный, что не так, так не то, чтобы не работает, так сразу зависает
карма: 1

0
Ответов: 3889
Рейтинг: 362
#15: 2012-01-08 00:39:15 ЛС | профиль | цитата
minos, а я предупреждал, что браузер не позволяет адекватно следить за прогрессом, это - самое сложное во всей затее. Усугубляется всё тем, что браузер работает в отдельном, независимом потоке (COM-сервер), по-этому парсер для ajax2html, рассчитанный на обработку множества html-файлов в папке (wiki), использует не менее суровый метод синхронизации потоков, отдан на проверку tom-it, может эта франкенсхема даже увидит свет когда-нибудь В общем, SafeMode и Events Вам в помощь, Индия рядом
карма: 1

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)