我有一个问题,我现在花了很长时间试图修复和搜索解决方案,但无济于事。所以我希望你们能够理解我想要实现的目标并提出一些建议吗?
基本上,我试图编写一个允许用户输入单词的程序,程序将转到dictionary.reference.com,搜索单词,然后检索.mp3超链接(或打开它)并允许用户听取单词的发音方式。所以基本上它是一个单词发音程序。
我的代码仍然处于非常早期阶段,但我的粗略想法是我会有一个GUI来输入单词,所以不要介意调试固定变量(例如searchWord)。
以下代码:
import java.net.*;
import java.io.*;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public class Pronun {
String searchWord = "development"; // Fixed variable for debugging
Element audio;
public Pronun() throws Exception {
// As program is ran, begin searching the word in the dictionary.
URL makeSearch = new URL("http://dictionary.reference.com/browse/"+searchWord+"?s=t");
URLConnection connectTo = makeSearch.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(connectTo.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
File input = new File("output.txt");
Document doc = Jsoup.parse(input, "UTF-8");
Element audio = doc.select("audspk.classname").first();
// Write the hyperlink to the file "output.txt".
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("output.txt", true)));
out.println(audio);
out.close();
in.close();
}
}
我试图从页面中检索的超链接是:
<a class="audspk" href="http://static.sfdict.com/dictstatic/dictionary/audio/luna/D02/D0238600.mp3">
正如你所看到的,我试图通过Jsoup,使用它的类名 - &#34; audspk&#34;。
但基本上,当我运行代码时,这就是我收到的错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from Elements to String
at URLConnectionReader.main(URLConnectionReader.java:25)
我试图通过toString转换它,但这似乎也不起作用,但我必须在那里做错事,所以对此的任何帮助都会受到赞赏。我希望你能理解我在这里想要达到的目标。
答案 0 :(得分:1)
我有几点意见:
output.txt
似乎是空的,因为你没有写任何内容。如果您要打印链接,请使用attr
的方法Element
:
String link = doc.select(".audspk").first().attr("href");
jsoup
可以自行下载并解析URL
:
URL makeSearch = new URL("http://dictionary.reference.com/browse/" + searchWord + "?s=t");
Document doc = Jsoup.parse(makeSearch, 1000);
String link = doc.select(".audspk").first().attr("href");
System.out.println(link);