java - 如何将 Jsoup 输出存储在 ArrayList 中?

标签 java arraylist jsoup multiple-entries

我用 Jsoup 解析了一个网站并提取了链接。现在我尝试仅将该链接的一部分存储在 ArrayList 中。不知何故,我无法一次存储一个链接。

我尝试了几种 String 方法、Scanner 和 BufferedReader 但没有成功。

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class DatenImportUnternehmen {


public static void main(String[] args) throws IOException {

    ArrayList<String> aktien = new ArrayList<String>();
    String searchUrl = "https://www.ariva.de/aktiensuche/_result_table.m";


    for(int i = 0; i < 1; i++) {

        String searchBody = "page=" + Integer.toString(i) + 
    "&page_size=25&sort=ariva_name&sort_d=asc 
    &ariva_performance_1_year=_&ariva_per 
    formance_3_years=&ariva_performance_5_years= 
    &index=0&founding_year=&land=0&ind 
    ustrial_sector=0&sector=0&currency=0 
    &type_of_share=0&year=_all_years&sales=_&p 
    rofit_loss=&sum_assets=&sum_liabilities= 
    &number_of_shares=&earnings_per_share= 
    &dividend_per_share=&turnover_per_share= 
    &book_value_per_share=&cashflow_per_sh 
    are=&balance_sheet_total_per_share= 
    &number_of_employees=&turnover_per_employee 
    =_&profit_per_employee=&kgv=_&kuv=_&kbv=_&dividend 
    _yield=_&return_on_sales=_";


    // post request to search URL
    Document document = 
    Jsoup.connect(searchUrl).requestBody(searchBody).post();
    // find links in returned HTML
    for(Element link:document.select("a[href]")) {
        String link1 = link.toString();
        String link2 = link1.substring(link1.indexOf('/'));
        String link3 = link2.substring(0, link2.indexOf('"'));


        aktien.add(link3);

        System.out.println(aktien);

    }
    }


}
}                             

我的输出看起来像(只是其中的一部分):

[/1-1_drillisch-aktie]
[/1-1_drillisch-aktie, /11_88_0_solutions-aktie]
[/1-1_drillisch-aktie, /11_88_0_solutions-aktie, /1st_red-aktie]
[/1-1_drillisch-aktie, /11_88_0_solutions-aktie, /1st_red-aktie, /21st- 
_cent-_fox_b_new-aktie]
[/1-1_drillisch-aktie, /11_88_0_solutions-aktie, /1st_red-aktie, /21st- 
_cent-_fox_b_new-aktie, /21st_century_fox-aktie]
[/1-1_drillisch-aktie, /11_88_0_solutions-aktie, /1st_red-aktie, /21st- 
_cent-_fox_b_new-aktie, /21st_century_fox-aktie, /2g_energy-aktie]
[/1-1_drillisch-aktie, /11_88_0_solutions-aktie, /1st_red-aktie, /21st- 
_cent-_fox_b_new-aktie, /21st_century_fox-aktie, /2g_energy-aktie, 
/3i_group-aktie]
[/1-1_drillisch-aktie, /11_88_0_solutions-aktie, /1st_red-aktie, /21st- 
_cent-_fox_b_new-aktie, /21st_century_fox-aktie, /2g_energy-aktie, 
/3i_group-aktie, /3i_infrastructure-aktie] 

我想要实现的是:

[/1-1_drillisch-aktie]
[/11_88_0_solutions-aktie]
[/1st_red-aktie]
[/21st-_cent-_fox_b_new-aktie]

等等。

我只是不知道现阶段的问题是什么。

最佳答案

您的问题是您在打印数组的同时在循环中添加数组。

要解决此问题,您可以在数组外部打印数组以一次性打印所有内容,或者您​​可以打印 link3 (这是您要添加到 ArrayList 中的内容),而不是打印循环中的数组。

选项 1:

for(Element link:document.select("a[href]")) {
    String link1 = link.toString();
    String link2 = link1.substring(link1.indexOf('/'));
    String link3 = link2.substring(0, link2.indexOf('"'));

    aktien.add(link3);
}
System.out.println(aktien);

选项 2:

for(Element link:document.select("a[href]")) {
    String link1 = link.toString();
    String link2 = link1.substring(link1.indexOf('/'));
    String link3 = link2.substring(0, link2.indexOf('"'));

    aktien.add(link3);
    System.out.println(link3);
}

关于java - 如何将 Jsoup 输出存储在 ArrayList 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57560390/

相关文章:

java - 原始类型和数据完整性列表

java - 如何使用 jsoup 获取所有 div 元素?

android - JSoup 不解析 Android 已知问题页面

Java HashMap的创建、编辑和删除

java - 使用php获取内存使用情况

java - 在 Java 中将类似数组的 String 转换为 ArrayList

android - Jsoup在不重复的情况下获取具有相同类名的内部div中的文本

java - 应用程序在 Android 3.0 平板电脑上缩小

java - 如何向上转换 Java 8 Optional 中包含的对象?

java - 将项目添加到数组列表时出现错误