java - 无法抓取标题

标签 java web-scraping jsoup

我已经成功地从页面中收集了我想要的所有数据,但我不明白为什么我无法提取同一年龄的标题或股票代码。我尝试过的方法都不起作用。

感谢任何可以提供帮助的人。

我编写的最初代码效果不佳,该站点的某人已经帮助解决了它。我知道表名是正确的,但我似乎无法弄清楚为什么它不起作用。仅供引用,我想要获取的是图表下方的股票代码和公司名称。

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class WebScrape {
    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Ticker: ");
        String userInput = scanner.next();
        final String url = "https://finviz.com/quote.ashx?t=" + userInput;

        try {
            final Document document = Jsoup.connect(url).get();
            ArrayList<String> dataArray = new ArrayList<>();
            for (Element row : document.select("table.fullview-title tr")) {
                if ( !row.select("td.fullview-title:nth-of-
                        type(2)").text().contentEquals("")) {
                        String data = row.select("td.fullview-title:nth-of-
                                type(2)").text();
                                dataArray.add(data);
            }

            System.out.println(dataArray);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

我没有收到任何错误,并且可以轻松连接到该网址,但代码仅返回一个空值。

最佳答案

我认为你需要更改选择器。

“table.fullview-title tr”->“table.fullview-title tr td”

“td.fullview-title:nth-​​of-type(2)”->“a.fullview-ticker”

我希望这有帮助:

    public class DemoApplication {

    public static void main(String[] args) {
//  Simplification:
//        Scanner scanner = new Scanner(System.in);
//        System.out.println("Ticker: ");
//        String userInput = scanner.next();
//        final String url = "https://finviz.com/quote.ashx?t=" + userInput;
        final String url = "https://finviz.com/quote.ashx?t=LCI";

        try {
            final Document document = Jsoup.connect(url).get();
            ArrayList<String> dataArray = new ArrayList<>();
            for (Element row : document.select("table.fullview-title tr td")) {
                if (!row.select("a.fullview-ticker").text().contentEquals("")) {
                    String data = row.select("a.fullview-ticker").text();
                    dataArray.add(data);
                }
            }
            System.out.println(dataArray);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

输出:

[LCI]

关于java - 无法抓取标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57825831/

相关文章:

xml - XPath如何获取子节点text和self

java - 无法使用 spring 辅助类发送邮件

java - Java中PriorityQueue类的加法操作

python - urllib.open() 无法处理带有 # 的字符串?

java - 使用 jsoup 查找具有给定文本的元素

java - jsoup - 如何检查网页是否存在

java - 使用 jsoup 解析脚本(JSON 数据)

java - 将 JavaFX 标签中的多行文本居中

java - 已为此响应调用 HandlerInterceptor getOutputStream()

javascript - 使用 YQL 以尽可能低的资源使用率(即最少的查询数量)执行图像抓取