Как я могу извлечь содержимое веб-приложения из HTML-кода?

#java #html #web-applications #data-mining

#java #HTML #веб-приложения #интеллектуальный анализ данных

Вопрос:

Итак, в настоящее время я пытаюсь собрать данные с сайтов азартных игр csgo для их анализа. Итак, я написал очень короткую программу, извлекающую html-код с этого веб-сайта, но она не будет извлекать содержимое веб-приложения. Моя проблема сейчас в том, что мне нужна информация в этом веб-приложении. Я имею в виду, что я могу просмотреть его в Chrome, так что, думаю, решение найдется. Может быть, картинки помогут понять, что я ищу:

HTML-код; отметил нужную строку

 import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;

public class Main {

    public static void main(String[] args) {
        
        try {
            
            String html = Jsoup.connect("https://www.wtfskins.com/crash").get().html();
            System.out.println(html);
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

Вот что я получаю. Мне нужно содержимое

 <body> <app-root> 
  loading... // That's the problem
 </app-root> 
 <script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script> 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script> 
 <script src="/assets/js/jquery-ui.min.js"></script> 
 <script src="/assets/js/bootstrap.js"></script> 
 <script src="/assets/js/sha3.js"></script> 
 <script src="/assets/js/sha256.js"></script> 
 <script type="text/javascript" src="inline.318b50c57b4eba3d437b.bundle.js"></script> 
 <script type="text/javascript" src="polyfills.2b75d68d2d6cb678fc8d.bundle.js"></script> 
 <script type="text/javascript" src="main.7932c68952979c366236.bundle.js"></script>  
</body>
 

Комментарии:

1. Может быть, вы можете попробовать использовать регулярные выражения для сопоставления тегов и получения содержимого между тегами.

Ответ №1:

Данные загружаются на страницу после первоначального DOM. Когда вы получаете данные с JSoup помощью , вы получаете начальный HTML-запрос.

Это изображение показывает, что html-запрос действительно дает своего рода пустую HTML-структуру

введите описание изображения здесь Если вы проверите Network вкладку dev tools в браузере, вы увидите, что после начальной загрузки появятся дополнительные запросы XHR, получающие данные. ngcontent атрибуты тегов гарантируют, что страница загружается с использованием Angular, который является фреймворком Javascript.
Это сделано для того, чтобы повысить эффективность загрузки страниц и немного больше защитить их от удаления.

ПОСЛЕ ПРОВЕРКИ

На вкладке сеть после загрузки страницы отображаются несколько запросов с ответами в формате JSON. Вам нужно посмотреть на них, посмотреть, какие заголовки запросов являются обязательными для их запроса. Как показано на рисунке, одним из интересных является: https://www.wtfskins.com/api/v1/p2ptrading/usertrades /

введите описание изображения здесь

Вы можете начать с рассмотрения того, как работает Веб, с подкатегорий об асинхронных запросах Javascript и основах REST API. Если вы не знакомы с веб-разработчиками, исследование займет некоторое время.

Комментарии:

1. Ну, прежде всего, большое вам спасибо за хорошо написанный ответ! Но я должен признать, что я этого не понимал. Я не знаю, что делать с этой информацией. Может быть, у вас есть какие-нибудь темы или видео YT, с которыми я мог бы поработать?

2. HTML-запросы GET — это не единственные запросы, которые создают веб-страницу. Данные / файлы собираются во время после начальной загрузки. На вкладке Сети отображается вся информация о тех запросах, которые страница отправляет на сервер. Вы должны реплицировать те, которые содержат нужные вам данные.

3. @SO_is_love Я добавил две ссылки к сообщению, но вам нужно исследовать немного больше, чем это. Если вы согласны с тем, что это ответ на ваш вопрос о том, почему ваш код не сработал, не стесняйтесь принять мой ответ