gpt4 book ai didi

java - 使用 Java 从维基百科表中提取特定元素

转载 作者:行者123 更新时间:2023-12-01 11:05:39 26 4
gpt4 key购买 nike

为了我自己将来的方便,我决定尝试创建一个 Java 程序,它可以获取我计算机上的目录和电视节目的维基百科条目的 URL,并继续使用该节目重命名该目录中的所有文件名称、“SxEy”和剧集标题。虽然我相信我有用于重命名文件的工作代码,但我坚持的一件事是填充包含剧集名称的数组。虽然这可以手动完成,但这首先会消除程序的意义,所以我希望能够从互联网上获取信息。

现在有问题的电视节目是 Arrow ,我现在正在寻找第二季的剧集名称。我一直在尝试修改this jsoup 教程来访问表,希望在它至少开始工作后缩小到所需的表。我修改后的代码供引用:

package tablescraper;

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class TableScraper {

public static void main(String[] args) {
try {
Document doc = Jsoup.connect("http://en.wikipedia.org/wiki/List_of_Arrow_episodes").get();
Elements trs = doc.select("table.wikitable tr");

//remove header row
trs.remove(0);

for (Element tr : trs) {

Elements tds = tr.getElementsByTag("td.summary");
Element td = tds.first();
System.out.println("Episode: " + td.toString());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

在当前状态下,我在 System.out.println("Episode: "+ td.toString()); 处遇到 java.lang.NullPointerException 。我尝试在 getElementsByTag 语句中添加 .summary ,希望只会挑选出具有“summary”类的元素,这正是我需要的。

到目前为止我的方法是否犯了错误?我有什么明显的遗漏吗?您会注意到表中的每隔一行都包含一个总结该情节的段落 - 这种格式更改是问题的一部分吗?如果我像现在这样迭代每个表行,它会成为一个问题吗?展望 future ,我将如何区分页面上的每个表格?如果没有办法区分这个特定来源的它们,那么这并不是世界末日,如果有必要的话,我可以简单地列出所有剧集,然后将其缩减为根据所需的集数选择条目范围。

最佳答案

页面中必须存在类为 wikitable 的表格,其中包含不包含类 summarytd 元素。

因此,在输出 td 之前插入空检查是一个好主意:

Elements tds = tr.getElementsByTag("td.summary");
Element td = tds.first();
if (td != null)
System.out.println("Episode: " + td.toString());

然后

Elements tds = tr.getElementsByTag("td.summary");

永远不会返回非空列表,因为没有带有标签td.summary的元素。再次使用 select 查找与选择器 td.summary 匹配的后代:

Elements tds = tr.select("td.summary");

最后要打印剧集(即 td 元素的文本内容),不要使用 td.toString() 而是使用 td.text ()

System.out.println("Episode: " + td.text());

关于java - 使用 Java 从维基百科表中提取特定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32978840/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com