2013-07-17 1 views
0

У меня возникает одна проблема, захватывающая элементы по тегу в Jsoup. Возврат метода links.html() writen в String crawlingNode = links.html(); записывает в .txt файл целую строку без пробелов или делений строк. Но в консоли он показывает, что ссылки делятся на строку. Итак, мне нужно задать , если есть один способ записи в файле .txt, ссылки разделяются на строки с использованием метода html()? Для меня не имеет смысла, что возвращаемый метод на консоли отображается разделенным и в файле .txt я могу сделать то же самоеКак разделить строки, используя метод html() в Jsoup

ps: Извините, что не дал более короткую версию, но код полностью завершен. Фокус на

Elements links = doc.getElementsByTag("cite"); 
      String crawlingNode = links.html(); 
       crawlingNode = crawlingNode.replaceAll("(?=<).*?(>=?)", ""); //Remove undesired html tags 
        System.out.println(crawlingNode); 
         httptest.WriteOnFile(writer, crawlingNode); 

часть, которая содержит проблему, которую я хочу решить. Заранее спасибо!

public class httptest { 

     static File file; 
     File folder= null; 
     String crawlingNode, date, timeZone,Tag="Google Node"; 
     static BufferedWriter writer = null; 
     static httptest ht; 

     public httptest() throws IOException{ 

      date = new SimpleDateFormat("yyyy.MM.dd hh-mm-ss").format(new Date()); 
       folder = new File("queries/downloads/"+date+" "+TimeZone.getDefault().getDisplayName()); 
        file = new File(folder.getPath()+"\\"+date+" "+Tag+".txt"); 
         folder.mkdir(); 

     } 

     private void GetLinks() throws IOException{ 

      Document doc = Jsoup.connect("http://google.com/search?q=mamamia") 
         .userAgent("Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.8.1.6) Gecko/20070723 Iceweasel/2.0.0.6 (Debian-2.0.0.6-0etch1)") 
         .cookie("auth", "token") 
         .timeout(3000) 
         .get(); 

       Elements links = doc.getElementsByTag("cite"); 
       String crawlingNode = links.html(); 
        crawlingNode = crawlingNode.replaceAll("(?=<).*?(>=?)", ""); //Remove undesired html tags 
         System.out.println(crawlingNode); 
          httptest.WriteOnFile(writer, crawlingNode); 

     } 


      private static void OpenWriter(File file){ 
       try { 
        writer = new BufferedWriter(new FileWriter(file)); 

      } catch (IOException e) { 

       JOptionPane.showMessageDialog(null, "Failed to open URL Writer"); 
        e.printStackTrace(); 

      } 

      } 

      private static void WriteOnFile(BufferedWriter writer, String crawlingNode){ 

       try { 

        writer.write(crawlingNode); 
      } catch (IOException e) { 

       JOptionPane.showMessageDialog(null, "Failed to write URL Node"); 
        e.printStackTrace(); 

      } 

      } 


      private static void CloseWriter(BufferedWriter writer){ 
       try { 

        writer.close(); 

       } catch (IOException e) { 

        JOptionPane.showMessageDialog(null, "Unable to close URL Writer"); 
        System.err.println(e); 

       } 
      } 

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

       ht = new httptest(); 
       httptest.OpenWriter(file); 
       ht.GetLinks(); 
       httptest.CloseWriter(writer); 

     } 

    } 
+0

Попробуйте следующее: WriteOnFile (writer, crawlingNode + "\ n"); – Collin

+0

Я пробовал httptest.WriteOnFile (писатель, crawlingNode + System.lineSeparator() + "gogogo"); Это корректно печатается даже в блокноте, что означает, что метод html возвращает действительно одну большую строку, которая не должна содержать ломаных строк ... может понять, как ее отображение в консоли или в других редакторах. –

+0

Если я попытаюсь заменить линии break с помощью crawlingNode.replaceAll (System.getProperty («line.separator»), «GOGO»); ничего не происходит, а значит, нет символов breaklines =/ –

ответ

1

Еще раз я нашел свой собственный ответ. Заменить строки не было правильным решением. Вместо этого нам нужно создать еще одну строку и получить ее ссылки с помощью метода text(); Во всяком случае, кусок кода работает для меня его ниже:

Elements links = doc.getElementsByTag("cite"); 
       String crawlingNode = links.html(); 
        crawlingNode = crawlingNode.replaceAll("(?=<).*?(>=?)", ""); //Remove undesired html tags 

        for (Element link : links) { 

        String linkText = link.text()+System.lineSeparator(); 
        System.out.println(linkText); 
        httptest.WriteOnFile(writer, linkText); 
} 

Если вы, ребята, могли голосовать на ответ и на этот вопрос я бы очень потеху.

+0

Молодец, я рад, что вы его работали. Это входит в мою личную кулинарию. – Collin

+0

@ Collin Вы могли бы проголосовать за вопрос, пожалуйста? Я хотел бы удалить негативацию из одной глупости. =] –

0

Возможно, вы захотите попробовать добавить инструкцию для проверки каждого элемента за раз.

for(Element link : links) 
{ 
     String crawlingNode = link.html(); 
     crawlingNode = crawlingNode.replaceAll("(?=<).*?(>=?)", ""); //Remove undesired html tags 
     System.out.println(crawlingNode); 
     httptest.WriteOnFile(writer, crawlingNode); 
} 

Хотя я не уверен на 100%, что один элемент работает с методом .html(). Вам придется попробовать сами. Дайте мне знать, как это происходит.

+0

вот так он напишет все ссылки и реплицирует для каждого объекта ссылки хе-хе, я так думал, что уже =]], но ty –

+0

Упс. Я вижу, вы уже пробовали вышеуказанные предложения. Я честно думал, что это сработает. – Collin

+0

посмотрите, что я сказал hehe =] –

1

Линии в crawlingNode разделены разделителем линии unix \n. Windows использует \r\n, так что у вас возникнут проблемы с тем, чтобы увидеть разлад строки, например. Блокнот. Вы можете использовать другой редактор или заменить разделители.

crawlingNode.replace("\n", System.getProperty("line.separator")) 
+0

Держу пари, что это проблема. Попробуйте это, прежде чем переставить его в оператор for. – Collin

+0

Я попробовал, что сказал u, и этот crawlingNode.replace ("\ n", System.LineSeparator()); даже если это не сработает ... черт возьми, но я вижу в одном, что вы, ребята, пишете, со словом, он разбивает строки, поэтому, если я хочу прочитать ссылки, я должен просто взять строку как массив, а затем отделить чтение/n? –

+0

Ой, подожди, я на секунду задержался. Вы пытаетесь разделить строку на отдельные строки. Попробуйте это: httptest.WriteOnFile (writer, crawlingNode + "\ n"); – Collin

 Смежные вопросы

  • Нет связанных вопросов^_^