Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.10.2016, 16:17
Новичок на форуме
Отправить личное сообщение для quende Посмотреть профиль Найти все сообщения от quende
 
Регистрация: 27.10.2016
Сообщений: 2

Перебор через URL + извлечение данных по странице
Друзья мои, приветствую!

Совсем недавно начал работать с JS и возникло несколько вопросов.
В частности, нужно решить вот какую задачу:
Есть страницы с определенными URL: http://www.transfermarkt.co.uk/en/z/kader/verein/{i}, где {i} - переменная часть = значения от 1 до 56000.

я уже нашел нужные части на странице и даже достал их, но встал вопрос как их получить в осязаемый вид (csv, txt или xls).
Вот то, что мне удалось написать:

window.Arr = '';/*я сделал через строку, но можно попробовать и через массив*/ 
 
for(i=1;i<=10;i++){ /* здесь пока указал 10, но нужно указать 56000*/
  var http = new XMLHttpRequest();  
  http.open('GET', 'http://www.transfermarkt.co.uk/en/z/kader/verein/'+i);
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      var doc = new DOMParser().parseFromString(this.responseText, "text/html");   
      var Cou = doc.getElementsByClassName('flaggenrahmen')[0].title;
      var Team = doc.getElementsByClassName('dataName')[0].innerHTML;      
      var CouNum  = doc.getElementById('land_select_breadcrumb')[0].value;   
      Team = Team.replace('\n                            <h1 itemprop="name">\n                                <b>','');
      Team = Team.replace('</b>\n                            </h1>','');      
      Team = Team.replace("</h1>","");        
      window.Arr += "[" + CouNum + "]" + Cou + "|" + Team + "\r\n"; /*можно сделать и через массив*/
    }    
  }  
  http.send(null);  
}


заметил по логам, что не все данные сохраняются, по всей видимости, он не "успевает" забирать данные со всех страниц.
Получается этот способ не такой уж и действенный, быть может вы подскажите "правильный" и более приемлемый способ по решению такой задачи ?

Кроме того, получившийся результат нужно сохранить в csv или xls

Помогите, пожалуйста!
Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 28.10.2016, 07:44
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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

Имхо проще использовать готовый Аякс( к примеру от JQ) там и проще кроссбраузерно установить синхронность, ассинхронность... можно создать очередь ассинхронных запросов если необходима юзабельность сайта в это же время:
http://jquery-docs.ru/Ajax/jQuery.ajax/

Последний раз редактировалось Deff, 28.10.2016 в 07:48.
Ответить с цитированием
  #3 (permalink)  
Старый 28.10.2016, 08:18
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Deff, ну не скажи. Быстрее таки держать десяток активных запросов если канал и сервак позволяет и по мере освобождения запускать следующий.
__________________
29375, 35
Ответить с цитированием
  #4 (permalink)  
Старый 28.10.2016, 08:26
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Aetae,
Брауз запрещает более пяти активных запросов со страницы(хотя давно тестил, но менее трех месяцев, стоит База на JSON запросах на статистику дык коли ассинхронно - затыкаются эпизодически, нумерованный список воспроизводится с пропусками
=============
И да, мон слегка ускорить с ассинхронностью, запуская Пять одновременно, и каждый по возврату запускает новый запрос, элементы уже отправленых(если данные еще и отправляются из списка) - помечать

Но по тесту, синхронный тут жа возвращает через время задержки на приём/передачу
Ассинхронный может уже получить данные, но не отдавать скрипту, а прерываться на выполнение своих актуальных задач(замечено при много вкладок и открытии новых) сниффер на компе видет отдачу запроса, а скрипту данные могут поступать ток через секунду, наблюдал при открытии новых вкладок с Хабра, а скрипт с Аяксом на своем сайте во вкладке

Последний раз редактировалось Deff, 28.10.2016 в 08:39.
Ответить с цитированием
  #5 (permalink)  
Старый 28.10.2016, 15:36
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Ну так то да, грабить большой сайт из браузера вообще не слишком разумно, не под то заточен. На крайняк можно нодой воспользоваться было. А зафейлиные запросы надо просто отслеживать и перезапускать.)

P.S. Количество подключений настраивается, я у себя подтюнил на-побольше, ибо канала не жалко, а прирост скорости местами есть.)
__________________
29375, 35
Ответить с цитированием
  #6 (permalink)  
Старый 31.10.2016, 14:16
Новичок на форуме
Отправить личное сообщение для quende Посмотреть профиль Найти все сообщения от quende
 
Регистрация: 27.10.2016
Сообщений: 2

Друзья мои, спасибо, почему то не приходили отбивки об ответах, поэтому не видел, что отвечали)
Спасибо за подсказки, буду копать
Ответить с цитированием
  #7 (permalink)  
Старый 31.10.2016, 14:58
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

quende, onerror и ontimeout повесить не забудь.)
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить данные через AJAX и отобразить на странице skiller AJAX и COMET 2 17.06.2011 11:09
Водяной знак на fancybox bobrina Общие вопросы Javascript 1 03.06.2011 21:11
переход на выбор сайт через поле ввода url (как убрать функцию "открыть все") ? rashid86 Элементы интерфейса 1 31.03.2011 14:54
Передача данных сервером скрипту. Сохранять на странице? (не аякс) балерун Общие вопросы Javascript 3 28.12.2010 22:48
Просмотр передаваемых данных через AJAX Гость AJAX и COMET 3 04.08.2008 14:34