Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Парсер сайта / 5 сообщений из 5, страница 1 из 1
25.03.2015, 00:54
    #38915808
_Novichok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер сайта
Здравствуйте.

Тренируюсь, пишу парсер сайта https://www.diablosport.com/products/trinity.html
Использую встроенный компонент WebBrowser
Хочу спарсить Year, Make, Model, Engine и характеристики устройства.
Исследовав иходный код страницы, понял, что делать выбор в комбобоксах програмно можно вызывая соответсвующие JavaScrip-функции в коде страницы:
Код: c#
1.
2.
3.
4.
webBrowser1.Document.InvokeScript("goToMake",new object[]{year});
webBrowser1.Document.InvokeScript("goToModel", new object[]{make});
webBrowser1.Document.InvokeScript("goToEngine", new object[]{model});
webBrowser1.Document.InvokeScript("showTunesParams", new object[]{engine, "2"});


(приведенно сокращенно, все делается в циклах с проверками и т.д.)
интересует собственно таблица с характеристиками прорграмматора, которая генерируется ajax-запросом на основе выбранных данных:
Функция JavaScript
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
function drawTunesTable()
{
        var tunesTable = $('<table/>').attr('class','zebra');
	var thead = $('<thead/>').html('<tr><th width="20%">Name</th><th>Description</th><th class="center" width="7%">HP</th><th class="center" width="7%">TQ</th>');
	var tfoot = $('<tfoot/>');
	var tbody = $('<tbody/>');
	
	for(i = 0; i < tunesParams.length; i++){
		if(tunesParams[i].catid == 3){
			if(i%4 == 3){
			  tr.appendTo(tbody);
			}
			if(i%4 == 0){
			  var tr = $('<tr/>');
			}
			var td = $('<td/>').html(tunesParams[i].value);
			if(i%4 == 2 || i%4 == 3){
				td.attr('class','center');
			}
			td.appendTo(tr);
		}
		
	}
	thead.appendTo(tunesTable);
	tfoot.appendTo(tunesTable);
	tbody.appendTo(tunesTable);

	$('#tunesbox').empty().fadeOut();
	setTimeout(function(){
			$('#tunesbox').html(tunesTable).fadeIn(); // тут осуществляется вывод таблицы
	}, 200);

}


( интересующая таблица )

При этом, используя средства для разработчика Chrome и исследуя исходный код страницы можно увидеть, что таблица есть
Но если просто посмотреть исходный код страницы (не в режиме разработчика, а, например, блокнотом), то видно, что соответствующий div пустой, что и получаю в результате использования WebBrowser, потому не могу видеть и парсить данные.

Были идеи слегка модифицировать ту функцию, встроить ее в код страницы, чтобы она просто выдавала нужные строки куда-нибудь на тоже встроенный контрол или сразу в C#-код, но не знаю насколько это возможно и возможно ли вообще.

Поделитесь, пожалуйста, кто знает, опытом, може есть какие идеи или размышления по этому поводу.

Спасибо
...
Рейтинг: 0 / 0
25.03.2015, 09:46
    #38915968
EDUARD SAPOTSKI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер сайта
При выборе в комбобоксах формируется get-запрос вида:
https://www.diablosport.com/products/index.php?option=com_updates&view=tunes&format=json&pid=2&vid=1110
Запросы возвращают json, который обворачивается функцией в html-таблицу, что мешает напрямую подергать все данные гетами с сервера? Здесь vid=1110 как понимаю id-шник категории, можно просто в цикле перебрать и json распарсить.
_Novichokсоответствующий div пустой, что и получаю в результате использования WebBrowser
WebBrowser здесь скорее всего и не причем, вы точно дожидаетесь окончания загрузки таблицы?
...
Рейтинг: 0 / 0
25.03.2015, 10:35
    #38916046
_Novichok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер сайта
EDUARD SAPOTSKIвы точно дожидаетесь окончания загрузки таблицы?Да. установлен цикл на ожидание загрузки. Да и дело не в том, дожидаюсь я ее или нет. В режиме разработчика в хроме она есть, в исходном коде страницы она отсутствует. Изначально я и исходил из того, что таблица есть и ее будет нетрудно спарсить. Какая-то виртуальная она что ли.
Сейчас попробую подергать по той ссылке
...
Рейтинг: 0 / 0
25.03.2015, 10:56
    #38916112
EDUARD SAPOTSKI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер сайта
_NovichokКакая-то виртуальная она что ли.
Еще раз - нажмите в мозиле F12 - вкладка Network, открываем страницу и видим что пошли гет-запросы. Смотрим разметку - таблицы естественно нет, выбираем в комбобоксах категорию - смотрим в Network - пошел гет-запрос на сервер, который возвращает данные в json, скрипт подхватывает эти данные и рисует таблицу, вот и все премудрости.
...
Рейтинг: 0 / 0
25.03.2015, 11:13
    #38916136
_Novichok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер сайта
EDUARD SAPOTSKI,

Тю, та тут вообще все просто: json со всеми vid присутствует в коде страницы. По ходу просто распарсить этот большой json и просто слать запросы на json-характеристики программатора и парсить ответ.
часть большого jsonvar applicationChartItems = {"1999":{"CHEVROLET":{"CORVETTE":[["5.7L LS1","876"]],"SILVERADO 1500":[["4.8L V8","881"],["5.3L V8","885"],["6.0L V8","889"]],"SILVERADO 2500":[["4.8L V8","893"],["5.3L V8","897"],["6.0L V8","901"]],"SILVERADO 3500":[["4.8L V8","905"],["5.3L V8","909"],["6.0L V8","913"]],"SUBURBAN":[["6.0L V8","921"]]},"GMC":{"SIERRA 1500":[["4.8L V8","937"],["5.3L V8","941"],["6.0L V8","945"]],"SIERRA 2500":[["6.0L V8","961"],["5.3L V8","957"],["4.8L V8","953"]],"SIERRA 3500":[["4.8L V8","1287"],["5.3L V8","972"],["6.0L V8","976"]]},"PONTIAC":{"FIREBIRD":[["5.7L LS1","1000"]],"TRANS AM":[["5.7L LS1","1004"]]}},"2000":{"CHEVROLET":{"CAMARO Z28\/SS":[["5.7L LS1","873"]],"CORVETTE":[["5.7L LS1","877"]],"SILVERADO 1500":[["4.8L V8","882"],["5.3L V8","886"],["6.0L V8","890"]],"SILVERADO 2500":[["4.8L V8","894"],["5.3L V8","898"],["6.0L V8","902"]],"SILVERADO 3500":[["4.8L V8","906"],["5.3L V8","910"],["6.0L V8","914"]],"SUBURBAN":[["5.3L V8","918"],["6.0L V8","922"]],"TAHOE":[["5.3L V8","934"],["4.8L V8","930"]]},"GMC":{"SIERRA 1500":[["4.8L V8","938"],["5.3L V8","942"],["6.0L V8","946"]],"SIERRA 2500":[["6.0L V8","962"],["5.3L V8","958"],["4.8L V8","954"]],"SIERRA 3500":[["4.8L V8","969"],["5.3L V8","973"],["6.0L V8","977"]],"YUKON":[["5.3L V8","989"],["6.0L V8","993"]]},"PONTIAC":{"FIREBIRD":[["5.7L LS1","1001"]],"TRANS AM":[["5.7L LS1","1005"]]}},"2001":{"CHEVROLET":{"CAMARO Z28\/SS":[["5.7L LS1","874"]],"CORVETTE":[["5.7L LS1","878"]],"CORVETTE Z06":[["5.7L LS6","1052"]],"SILVERADO 1500":[["4.8L V8","883"],["5.3L V8","887"],["6.0L V8","891"]],
Большое спасибо!
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Парсер сайта / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]