Здравствуйте! Я хочу сохранить текстовое содержимое более 2000 страниц с одного сайта. Я использую следующий код:
<pre><code class="java">Document doc = Jsoup.connect(url)
.userAgent("Chrome/4.0.249.0 Safari/532.5")
.referrer("http://www.google.com")
.get();</code></pre>
Однако в консоли у меня появляется вывод следующего содержания:
<pre><code class="html"><html>
<head></head>
<body>
<script type="text/javascript" src="/aes.js"></script>
<script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);return e.toLowerCase()}var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),b=toNumbers("98344c2eee86c3994890592585b49f80"),c=toNumbers("35d494c9c55d6ba8cb9663293117cf00");document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/"; location.href="http://wepesstats.rf.gd/pes3.php?i=1";</script>
<noscript>
This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support
</noscript>
</body>
</html></code></pre>
Можете подсказать, как можно решить эту задачу, возможно, используя JavaScript или другой подход?
Судя по предоставленному коду и сообщению об ошибке, сайт, с которого вы пытаетесь получить данные, использует JavaScript для динамической загрузки содержимого страницы. Это означает, что при простом HTTP-запросе с помощью `Jsoup` или другой библиотеки вы загружаете только первоначальный HTML, который не содержит нужного контента.
### Возможные решения:
1. **Использование Selenium**:
Selenium — это инструмент для автоматизации браузеров. Он может эмулировать действия пользователя и поддерживает JavaScript. Пример кода на Java для использования Selenium:
```java
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class WebScraper {
public static void main(String[] args) {
// Укажите путь к chromedriver
System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
WebDriver driver = new ChromeDriver();
try {
driver.get("http://example.com");
// Получаем HTML-код страницы
String pageSource = driver.getPageSource();
// Выводим HTML-код в консоль или сохраняем его
System.out.println(pageSource);
} finally {
driver.quit();
}
}
}
```
Не забудьте [скачать ChromeDriver](https://chromedriver.chromium.org/downloads) соответствующей версии вашего браузера и указать правильный путь к нему.
2. **Использование библиотеки `HtmlUnit`**:
HtmlUnit — это библиотека Java, которая позволяет обрабатывать JavaScript. Вот простой пример:
```java
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
public class WebScraper {
public static void main(String[] args) {
try (final WebClient webClient = new WebClient()) {
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setCssEnabled(false); // Отключаем обработку CSS для ускорения
// Загружаем страницу
HtmlPage page = webClient.getPage("http://example.com");
// Ждем завершения выполнения JavaScript
webClient.waitForBackgroundJavaScript(10000);
// Получаем HTML-код страницы
String pageXml = page.asXml();
// Выводим HTML-код в консоль
System.out.println(pageXml);
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
3. **API запросы**:
Если сайт предоставляет API для получения данных, это будет лучшим вариантом, так как данные будут получены в структурированном виде (например, в формате JSON).
4. **Обработка HTTP запросов**:
Если JavaScript генерирует данные через API запросы, вы можете использовать такие инструменты как `Fiddler` или `Chrome DevTools` для отслеживания сетевых запросов и анализа, какое API используется. Затем можно использовать `Jsoup` или `HttpClient` для выполнения аналогичных запросов к этому API.
Попробуйте эти подходы и выберите тот, который лучше всего подходит для вашего сценария.
Простой путь - через селениум.
Сложный - курить их защиту от автоматических запросов.
Вот посмотри как тут пишут https://www.geeksforgeeks.org/selenium-with-java-t...