0

Jsoup でタグによって要素をキャッチする際に 1 つの問題が発生しています。メソッド links.html() writen in の戻り値はString crawlingNode = links.html();、.txt ファイルに、スペースや行区切りのない文字列全体を書き込みます。ただし、コンソールでは、リンクが行ごとに分割されていることが示されます。html() メソッドを使用してリンクを行ごとに分割する .txt ファイルに書き込む方法が 1 つあるかどうかを尋ねる必要がありますか? 私にとっては、コンソールで返されたメソッドが分割されて表示され、.txt ファイルで同じことができることは意味がありません

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);

        }

    }
4

3 に答える 3

1

の行crawlingNodeは UNIX の line-separator で区切られてい\nます。Windows が使用して\r\nいるため、メモ帳などで改行が表示されない場合があります。別のエディターを使用するか、セパレーターを置き換えることができます。

crawlingNode.replace("\n", System.getProperty("line.separator"))
于 2013-07-17T21:11:27.290 に答える
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);
}
于 2013-07-17T23:25:00.310 に答える
0

一度に各要素をスキャンするには、そこに for ステートメントを追加してみてください。

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

単一の要素が .html() メソッドで機能するかどうかは 100% 確信が持てませんが。自分で試してみる必要があります。それがどうなるか教えてください。

于 2013-07-17T21:06:42.510 に答える