0

我的程序进入我的 uni 结果页面,找到所有链接并保存到文件中。然后我读取文件并仅复制包含所需链接的行并将其保存到另一个文件中。然后我再次解析它以提取所需的数据

public class net {

    public static void main(String[] args) throws Exception {
        Document doc = Jsoup.connect("http://jntuconnect.net/results_archive/").get();

        Elements links = doc.select("a");
        File f1 = new File("flink.txt");
        File f2 = new File("rlink.txt");

            //write extracted links to f1 file
        FileUtils.writeLines(f1, links);

            // store each link from f1 file in string list
        List<String>  linklist  = FileUtils.readLines(f1);

            // second string list to store only required link elements
        List<String> rlinklist = new ArrayList<String>();

        // loop which finds required links and stores in rlinklist 
        for(String elem : linklist){
            if(elem.contains("B.Tech") && (elem.contains("R07")||elem.contains("R09"))){
                rlinklist.add(elem);                
            }           
        }           
        //store required links in f2 file
        FileUtils.writeLines(f2, rlinklist);

        // parse links from f2  file
        Document rdoc = Jsoup.parse(f2, null);
        Elements rlinks = rdoc.select("a");

        //  for storing hrefs and link text 
        List<String> rhref = new ArrayList<String>();
        List<String> rtext = new ArrayList<String>();

        for(Element rlink : rlinks){
            rhref.add(rlink.attr("href"));
            rtext.add(rlink.text());
        }

    }// end main

}

我不想创建文件来执行此操作。有没有更好的方法来获取仅特定 url 的 href 和链接文本而不创建文件?

它使用 Apache commons fileutils, jsoup

4

1 回答 1

1

这是摆脱第一个文件写入/读取的方法:

Elements links = doc.select("a");
List<String> linklist = new ArrayList<String>();
for (Element elt : links) {
    linklist.add(elt.toString());
}

第二次往返,如果我看懂了代码,就是为了提取满足某个测试的链接。您可以使用相同的技术在内存中执行此操作。

我看到您依赖Jsoup.parse从所选链接中提取 href 和链接文本。您可以通过将选定节点写入 a 来在内存中执行此操作,通过调用它的方法StringBuffer将其转换为 a ,然后使用采用 a而不是参数的方法之一。StringtoString()Jsoup.parseStringFile

于 2012-07-11T04:24:57.560 回答