0

Jsoupを使用して読み取り、結果をExcelシートにエクスポートしたいHTMLファイルがあります。その過程で、HTMLファイルに存在するすべての画像のlinks(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ファイルに2つの画像があります。しかし、私が書いたコードは、ファイルに存在する最初の画像へのリンクのみを示しています。私のコードのエラーを見つけるのを手伝ってください!

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 に答える