Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> HTML parse 
:(
    Опции темы
IgnisFatuus
Дата 17.3.2014, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.3.2013

Репутация: нет
Всего: нет



День добрый. Есть задачка:
-Вычачать HTML страничку и все картинки на которые она ссылается. (сделано)
-Открыв страничку на локальной машине браузером я хотел бы видеть эти картинки, т.е. переписать путь в тэге <img src=..."

Как это сделать наиболее эффективно? Я подумывал о regex, но на stackoverflow категорически не советуют этого делать.
PM MAIL   Вверх
Stolzen
Дата 17.3.2014, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Судя по описанию, вам должна подойти библиотека Jsoup. С помощью css селектора находите все теги img, и меняете абсолютный url (или что у вас там) на локальный 


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
IgnisFatuus
Дата 17.3.2014, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.3.2013

Репутация: нет
Всего: нет



У меня например есть такие теги в файле, который я закачал


<a href="#hp-feature-2" data-lbl="feature 2"><img src="/us/hp01-thumb-cloudworld-2110108.jpg" alt="Business in the Cloud">

я хочу сделать вместо <img src="/us/hp01-thumb-cloudworld-2110108.jpg" 

<img src="/hp01-thumb-cloudworld-2110108.jpg"   - как бы из текущей директории

я на всякий пожарный сохраняю в отдельном массиве/буфере название всех картинок.


PM MAIL   Вверх
Stolzen
Дата 17.3.2014, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Ну так отделяйте smile Я ж написал как можно... 


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
IgnisFatuus
Дата 18.3.2014, 06:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.3.2013

Репутация: нет
Всего: нет



Большое спасибо
PM MAIL   Вверх
IgnisFatuus
Дата 20.3.2014, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.3.2013

Репутация: нет
Всего: нет




Получилось вот так, но все равно не работает


Код

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.*;

import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.parser.ParserDelegator;
import java.awt.image.BufferedImage;
import java.net.URL;
import java.net.URLConnection;
import javax.imageio.ImageIO;
import javax.swing.text.AttributeSet;
import javax.swing.text.html.HTMLDocument;


public class ExtractAllImages {
static String result_doc =  "/home/foo/index.html";
static String home_folder = "/home/foo/";
static String start_webURL = "http://www.oracle.com/";


public static void main(String args[]) throws Exception {

    String webUrl = start_webURL;
    URL url = new URL(webUrl);
    URLConnection connection = url.openConnection();
    InputStream is = connection.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);

    HTMLEditorKit htmlKit = new HTMLEditorKit();
    HTMLDocument htmlDoc = (HTMLDocument) htmlKit.createDefaultDocument();

    HTMLEditorKit.Parser parser = new ParserDelegator();
    HTMLEditorKit.ParserCallback callback = htmlDoc.getReader(0);



    parser.parse(br, callback, true);
    FileWriter writer = new FileWriter(result_doc);
    htmlKit.write(writer, htmlDoc, 0, htmlDoc.getLength());
    writer.close();

    int number_or_images = 0;
    String[] array = new String[4096];



    for (HTMLDocument.Iterator iterator = htmlDoc.getIterator(HTML.Tag.IMG); iterator.isValid(); iterator.next()) {
        AttributeSet attributes = iterator.getAttributes();
        String imgSrc = (String) attributes.getAttribute(HTML.Attribute.SRC);
        System.out.println("img_src = " + imgSrc);


        if (imgSrc != null && (imgSrc.endsWith(".jpg") || (imgSrc.endsWith(".png")) || (imgSrc.endsWith(".jpeg")) || (imgSrc.endsWith(".bmp")) || (imgSrc.endsWith(".ico")))) {
            try {
                downloadImage(webUrl, imgSrc);
            } catch (IOException ex) {
                System.out.println(ex.getMessage());
            }
        }
        array[number_or_images] = imgSrc;
        number_or_images++;
        ///TODO change


    }

    for(int i =0; i < number_or_images; i++)
    {
       System.out.println("before = "+array[i]);
        while(true)
        {
            int count = array[i].indexOf('/');
            if(count == -1) break;
            array[i] = array[i].substring(count+1);
        }
        System.out.println("after = " + array[i]);
    }


    //TODO open file and replace tags
    int i =0;
   File input = new File(result_doc);
    Document doc = Jsoup.parse(input, "UTF-8");
    System.out.println( input.canWrite());
    for( Element img : doc.select("img[src]") )
    {
        String s = img.attr("src");
        System.out.println(s);

        img.attr("src", "/home/foo/"+array[i]); // set attribute 'src' to 'your-source-here'
        s = img.attr("src");
        System.out.println(s);
        ++i;
    }








}
private static void downloadImage(String url, String imgSrc) throws IOException {
    BufferedImage image = null;
    try {
        if (!(imgSrc.startsWith("http"))) {
            url = url + imgSrc;
        } else {
            url = imgSrc;
        }
        imgSrc = imgSrc.substring(imgSrc.lastIndexOf("/") + 1);
        String imageFormat = null;
        imageFormat = imgSrc.substring(imgSrc.lastIndexOf(".") + 1);
        String imgPath = null;
        imgPath = home_folder + imgSrc + "";
        URL imageUrl = new URL(url);
        image = ImageIO.read(imageUrl);
        if (image != null) {
            File file = new File(imgPath);
            ImageIO.write(image, imageFormat, file);
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }

}
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0803 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.