0

我有一个 HTML 文件,我想使用 Jsoup 读取并将结果导出到 Excel 工作表。在这个过程中,我想提取 HTML 文件中存在的所有图像的链接(src)。

这是我用来做同样事情的代码片段:

File myhtml = new File("D:\\Projects\\Java\\report.html");
            //get the string from the file myhtml
            String str = getFileString(myhtml);

            //getting the links to the images as in the html file
            Document doc = Jsoup.parseBodyFragment(str);
            Elements media = doc.select("[src]");

            //System.out.println(media.size());
            for(Element imageLink:media)
            {

                if(imageLink.tagName().equals("img"))
                    //storing the local link to image as global variable in imlink
                    P1.imlink = imageLink.attr("src").toString();
System.out.println(P1.imlink);
            }

        }

我想要链接的 HTML 文件中有两个图像。但是,我编写的代码仅显示文件中存在的第一个图像的链接。请帮我找出我的代码中的错误!

4

2 回答 2

0
  //Dom ex............

  import org.w3c.tidy.*;

  import java.io.*;

  import java.net.*;

  import org.w3c.dom.*;

  import java.util.*;

  public class demo

  {

  public static void main(String arg[])

  {

  try

  {

  InputStream input = new URL("http://www.southreels.com").openStream();

  Document document = new Tidy().parseDOM(input, null);

  NodeList imgs = document.getElementsByTagName("img");

  List<String> srcs = new ArrayList<String>();

  for (int i = 0; i < imgs.getLength(); i++) {

  srcs.add(imgs.item(i).getAttributes().getNamedItem("src").getNodeValue());

  }

  int i=0;

  for (String src: srcs) {

  System.out.println(i+"  "+src);

  i++;

  String file =System.getProperty("user.dir")+System.getProperty("file.separator");

  URL server = new URL(src);

  HttpURLConnection connection = (HttpURLConnection)server.openConnection();

  InputStream is = connection.getInputStream();

   OutputStream os = new FileOutputStream(file+"demo"+i+".jpg");

   byte[] buffer = new byte[1024];

  int byteReaded = is.read(buffer);

  while(byteReaded != -1)

  {

  os.write(buffer,0,byteReaded);

  byteReaded = is.read(buffer);

  }

   os.close();

  }

  }

   catch(Exception e)

  {

  }

  }

  }
于 2012-09-24T13:45:17.903 回答
0

在这里试试这个:

File f = new File("D:\\Projects\\Java\\report.html");

Document doc = Jsoup.parse(f, null, ""); // set proper Charset (2nd param) and BaseUri (3rd param) here
Elements elements = doc.select("img[src]");

for( Element element : elements )
{
    // Do something with your links here ...
    System.out.println(element.attr("src"));
}

顺便提一句。也许您的问题是将链接存储到全局变量中的部分。每次运行循环时都会覆盖它。更好的解决方案是将链接存储到列表中或在第一次点击后离开循环。

于 2012-09-24T14:20:20.690 回答