爲了我自己的未來便利,我決定嘗試創建一個Java程序,可以在我的計算機上使用目錄,並在電視節目中使用維基百科條目的URL,然後重命名所有顯示名稱爲「S x E y」的該目錄中的文件和該集的標題。雖然我相信我有工作代碼來重命名文件,但我堅持的一件事是填充包含劇集名稱的數組。雖然這可以手動完成,但首先會消除程序的重點,所以我希望能夠從互聯網上獲取信息。從Java中提取維基百科表中的特定元素
現在有問題的電視節目是Arrow,我正在尋找現在第2季的劇集名稱。我一直在嘗試修改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
,希望只能挑選出具有「摘要」類的元素,這是我需要的。
到目前爲止,我在方法中犯了錯誤嗎?我所做的任何明顯的遺漏?你會注意到表格中的每一行都包含了一段總結了這一集的段落 - 這種格式變化是問題的一部分嗎?如果我像現在一樣迭代每個表格行,它會不會成爲問題?展望未來,我將如何區分網頁上的每個表格?如果沒有辦法區分他們之間的這個特定的來源,那麼這不是世界末日,因爲如果有必要,我可以簡單地採取所有事件的列表,然後將其減少到選定範圍的條目在需要的情節數字上。
你怎麼知道它剛從第二季回來?這個'doc.select(「table.wikitable td.summary」)'應該返回來自所有季節的所有劇集的名字。 – FirstOne
我不知道它是什麼,但那是我的最終目標。現在我想它會查看頁面上包含指定標籤的所有表格,但目前還沒有運氣。隨着你的改變,我將如何輸出該劇集列表?我會調整'tr.getElementsByTag'到'tr.getAllElements'嗎?我對這個圖書館並不熟悉,但是列出所有情節會讓我更接近我的目標。 –