Java-соединение с jsoup - PullRequest
       8

Java-соединение с jsoup

0 голосов
/ 11 ноября 2018

Я пытаюсь получить информацию о запасе, но он не работает (в конечном итоге я добавлю тикер в качестве входных данных для функции) Я пытаюсь получить прибыль на акцию и соотношение цены к прибыли, но продолжаю получать эта ошибка. Как бы я это исправить? По крайней мере, мне просто нужен jsoup, чтобы иметь доступ к HTML-коду. По сути, я хочу, чтобы код выводил 15,62 из соотношения P / E.

Это мой код:

import org.jsoup.*;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

class Main {
    static Document document;
    public static void main(String[] args) throws java.io.IOException{

   Document doc = Jsoup.connect("https://www.nasdaq.com/symbol/aapl").get();
   Elements elements = doc.select("div#table-table fontS14px");
        System.out.println(elements.get(1).getAllElements().get(0).toString());
    }
}

Это сообщение об ошибке:

Exception in thread "main" java.net.SocketTimeoutException: Read timed out
    at java.base/java.net.SocketInputStream.socketRead0(Native Method)
    at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
    at java.base/java.net.SocketInputStream.read(SocketInputStream.java:171)
    at java.base/java.net.SocketInputStream.read(SocketInputStream.java:141)
    at java.base/java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
    at java.base/java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
    at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:345)
    at java.base/sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:746)
    at java.base/sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:689)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1604)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1509)
    at java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:527)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:750)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:722)
    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:306)
    at org.jsoup.helper.HttpConnection.get(HttpConnection.java:295)

это HTML, который я пытаюсь прочитать:

<div class="table-table fontS14px">

                <div class="table-row" style="">
                    <div class="table-cell">
                        <b>P/E Ratio</b>
                    </div>
                    <div class="table-cell">
                        17.23
                    </div>
                </div>

                <div class="table-row" style="">
                    <div class="table-cell">
                        <b>Forward P/E (1y)</b>
                    </div>
                    <div class="table-cell">
                        15.62
                    </div>
                </div>

                <div class="table-row" style="">
                    <div class="table-cell">
                        <b>Earnings Per Share (EPS)</b>
                    </div>
                    <div class="table-cell">
                        $&nbsp;11.87
                    </div>
                </div>

                <div class="table-row">
                    <div class="table-cell">
                        <b>Annualized Dividend</b>
                    </div>
                    <div class="table-cell">
                        $ 2.92
                    </div>
                </div>
                <div class="table-row">
                    <div class="table-cell">
                        <b>Ex Dividend Date</b>
                    </div>
                    <div class="table-cell">
                        11/8/2018
                    </div>
                </div>
                <div class="table-row">
                    <div class="table-cell">
                        <b>Dividend Payment Date</b>
                    </div>
                    <div class="table-cell">
                        11/15/2018
                    </div>
                </div>
                <div class="table-row">
                    <div class="table-cell">
                        <b>Current Yield</b>
                    </div>
                    <div class="table-cell">
                        1.39 %
                    </div>
                </div>
                <div class="table-row" style="">
                    <div class="table-cell">
                        <b>Beta</b>
                    </div>
                    <div class="table-cell">
                        1.02
                    </div>
                </div>
            </div>

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

Ссылка не работает, потому что перед доступом к ней много раз перенаправляет вас, а JSOUP просто принимает статический контекст, поэтому вы каждый раз получаете этот код ошибки.

Проблема, в частности, в Nasqad, поэтому, если вы хотите получить информацию об акциях для любого тикера, я настоятельно рекомендую вам сканировать Yahoo Finance , потому что он работает лучше, и если вы просто хотите информация, есть множество оболочек, таких как yahoo-finance-fix для Python или Java Finance Quotes для Java.

У меня есть сканер Nasqad ETF, созданный с использованием Java, но в частном репозитории на GitHub, если вам нужно, попросите меня об этом, и я приглашаю вас в репозиторий или что-то в этом роде!

Надеюсь, это помогло вам! Не стесняйтесь просить что-нибудь еще!

0 голосов
/ 20 декабря 2018

Используйте бесплатный API финансовых данных

В прошлом я разработал подобный скребок на веб-сайте NASDAQ. Веб-сайт NASDAQ (аналогично другим веб-сайтам) защищен от DDoS и использует регулирование. Следовательно, обход веб-сайта NASDAQ также требует, чтобы вы установили заголовки HTTP на расширение имитации HTTP-запроса на основе браузера. Например, если заголовок User-Agent пуст или сеанс не прикреплен к вашему запросу, NASDAQ заблокирует ваш запрос. Также потребуется установка правильных заголовков Referrer и X-Requested-With.

Вы можете определить требуемые заголовки и файлы cookie по

  1. открытие Dev Tools в Chrome,
  2. переключиться на вкладку Сеть,
  3. загрузить страницу, которую вы пытаетесь очистить,
  4. нажмите на каждую строку (представляющую один запрос / ответ),
  5. найдите строку, содержащую ответ, который вы ищете (например, GET / symbol / aapl)
  6. найдите раздел Request Headers в деталях
  7. используйте эти заголовки в своем скребке (срок действия файлов cookie и областей может истечь, т. Е. Вам снова потребуется выполнить шаги с 1 по 7.)

Если вам нужен доступ API к данным ETF, вы можете использовать пакет etfdb-api Node.js: https://www.npmjs.com/package/etfdb-api

Отказ от ответственности: я автор этого пакета:)

0 голосов
/ 11 ноября 2018

Кажется, что попытка URL-адреса кажется недостижимой, сначала попробуйте в браузере, доступен ли он? Если да, то попробуйте явно установить время ожидания, например, Jsoup.connect ("..."). Timeout (10 * 1000) .get ()

...