Java Jsoup, как получить изображения из ссылок сайта? - PullRequest
0 голосов
/ 13 октября 2018

У меня есть проект Java Maven, и я пытаюсь получить все изображения с веб-сайта и его подстраниц.Моя идея заключалась в том, чтобы найти все теги и затем сохранить их в arraylist.После этого я захотел зациклить их и искать изображения в каждой ссылке.Однако я не получаю никаких результатов.Это сообщение об ошибке Uncaught API call returned bad code: 500.Любая помощь с благодарностью!

@WebServlet(
    name = "HelloAppEngine",
    urlPatterns = {"/hello"}
)
public class HelloAppEngine extends HttpServlet{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    protected static final Gson GSON = new GsonBuilder().create();

    //This is just a test array

    ArrayList<String> testImages = new ArrayList<String>();
        ArrayList<String> list   = new ArrayList<String>();
    @Override

    protected final void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/json");
        String servlet = req.getServletPath();
        if(servlet.equalsIgnoreCase("/main")){
                String urlString = java.net.URLDecoder.decode(req.getParameter("url"),"UTF-8");

                                 // Connect to website. This can be replaced with your file loading implementation
            Document doc = Jsoup.connect(urlString).get();

            // Get all img tags
            Elements img = doc.getElementsByTag("img");
  Elements media = doc.select("[src]");
            int counter = 0;

            // Loop through img tags
            for (Element src : media) {
            if (src.tagName().equals("img")) {
                    counter++;
                testImages.add(src.attr("abs:src"));


                }

            }

            /*subpage*/
            try {
    Document docu = Jsoup.connect(urlString).get();
    Elements elements = docu.select("a");
    for(Element element : elements){
        System.out.println(element.absUrl("href"));
        list.add(element.absUrl("href")); //<-------HERE get links of website*****
    }
} catch (IOException e) {
    e.printStackTrace();
}

            for(int i = 0; i < list.size(); i++){
    doc = Jsoup.connect(list.get(i)).get();


    for (Element src : media) {
            if (src.tagName().equals("img")) {
                    counter++;
                testImages.add(src.attr("abs:src"));


                }

}

                            System.out.println(testImages);

        }
                }




                /*Line 54 returns an array of test images. Here is where you'll want to implement your crawling logo finding logic. 
                Here you can use the String "urlString" and perform a crawl on that site.

                JSoup is a great basic library for crawling, but you are welcome to use whatever library you would like.

                */              
                resp.getWriter().println(GSON.toJson(testImages));
        }

        @Override
    protected final void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req,resp);
        }


    }
...