Получить содержимое тега из множества URL

0

У меня есть ситуация: в CSV файле есть много URL-адреса - более 3000 в этом формате:

www.site1.com/product1

www.site1.com/product2

www.site1.com/product3

....

www.site1.com/product3001

со всей страницы я должен прочитать определенный тег - <div id="cat">category1</div>

Я пытаюсь решить эту проблему на стороне сервера, но для этого требуется много ресурсов сервера и вызывать ошибки Time Out. Тогда я задаюсь вопросом - есть ли способ, которым я могу это сделать с помощью какого-либо java-скрипта или jQuery? В этом случае браузер будет принимать трафик. Конечно - это займет некоторое время... но лучше, чем получить TimeOut с сервера.

  • 0
    Вы не можете отправлять междоменные запросы AJAX, если все эти внешние серверы не отправляют заголовки CORS. Я бы посоветовал не обрабатывать все URI одновременно.
  • 0
    запросы исходного кода iframe решат эту проблему .... но лучший вопрос заключается в том, нужно ли вам делать это каждый раз, когда кто-то запрашивает страницу, или по расписанию? куча разных опций для этого скрапа экрана .... и нужно ли связывать содержимое div # cat с URI? с частью Product1? Держал вокруг? Выкинуть? 3001 запрос - это большая нагрузка на сайт site1.com, если это не ваша собственная система ....
Показать ещё 4 комментария
Теги:
asp-classic

1 ответ

1

Я думаю, что это возможно с некоторыми вызовами ajax, а затем ищет этот конкретный элемент (id = "cat"). Но я думаю, что сайты должны быть на одном сервере/домене, чтобы это работало.

Другой метод, который я хотел бы попробовать, - создать iframe и на петле загрузить страницу и дождаться метода onload iframe, после загрузки я буду искать этот конкретный элемент и получить его содержимое... Это несколько более вероятно работа, но это будет болезненно медленным...

var urls = [url1, url2, url3...]; //get all the urls from your file
var urlsLength = urls.length; //get the number of urls to loop for
var iFrame = document.createElement("iframe"); //create an iframe
var iframeContainer = document.getElementById("iframeContainer"); //iframeContainer must exists on your page, you can even hide it with display="none"
var iFrameBody; //variable to hold the iframe body
iframeContainer.appendChild( iFrame ); //add the iframe to its container
for( var i = 0; i<urlsLength; ++i ){ //loop for all the urls
    iFrame.src = urls[i]; //browse the designated url
    iFrame.onload = function(){ //when it loads, then do your work
        iFrameBody = iFrame.contentDocument || iFrame.contentWindow.document; //get the body of the iFrame
        doSomething( iFrameBody.getElementById("ELEMENT ID TO LOOK FOR") ); //send the element to your functions
    }
}

//this function will receive the element from inside the iframe, you can do whatever you need to 
function doSomething(element){
 var elementHTML = element.innerHTML;
 console.log( element );
}

-РЕДАКТИРОВАТЬ-

Этот метод слишком медленный, как упоминалось выше в комментариях, так как эта сторона сервера (IMHO) наилучшим образом подходит, но по крайней мере у вас есть альтернативы, я бы держался подальше от запросов AJAX, чтобы сделать что-то подобное на массивных URL-адресах ([ CN10]) и придерживаться iframes, но все же верьте, что серверная сторона - GO GO. Приветствия.

  • 0
    Я хотел бы поблагодарить всех. В заключение - на стороне сервера или на стороне браузера (клиента) - нет быстрого способа, которым я мог бы получить источник этого большого QTY URL, и все это привело к написанию какой-то хорошей задачи CRON, которая выполнялась бы спокойно и тихо в полночь. Техника IFRAME хороша тем, что я могу передать некоторые чеки на внешнюю машину.
  • 0
    Пожалуйста, iframe, ajax и любые другие способы, которые вы пытаетесь использовать, будут медленными, так как нужно дождаться полной загрузки URL-адреса для доступа к элементу, на который вы нацеливаетесь ... Похоже, вы пытаетесь чтобы получить информацию о продуктах, не лучше ли запросить CSV-файл у этого владельца сайта, который он может получить из простого запроса к БД?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню