#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 Я добавил две ссылки к сообщению, но вам нужно исследовать немного больше, чем это. Если вы согласны с тем, что это ответ на ваш вопрос о том, почему ваш код не сработал, не стесняйтесь принять мой ответ