Java 如何在Jsoup中使用html()方法划分行

Java 如何在Jsoup中使用html()方法划分行,java,hyperlink,jsoup,elements,Java,Hyperlink,Jsoup,Elements,我在Jsoup中通过标记捕获元素时遇到了一个问题。返回写入String crawlingNode=links.html()中的links.html()方法在.txt文件中写入整个字符串,不带空格或行分割。但是,在控制台中,它显示了每行划分的链接。因此,我需要询问是否有一种方法可以使用html()方法在.txt文件中写入每行的链接分割?因为对于我来说,控制台上返回的方法显示分割是没有意义的,而在.txt文件中,我也可以这样做 ps:很抱歉没有给出一个较短的版本,但是代码是完全可运行的。关注 Ele

我在Jsoup中通过标记捕获元素时遇到了一个问题。返回写入
String crawlingNode=links.html()中的links.html()方法
在.txt文件中写入整个字符串,不带空格或行分割。但是,在控制台中,它显示了每行划分的链接。因此,我需要询问是否有一种方法可以使用html()方法在.txt文件中写入每行的链接分割?因为对于我来说,控制台上返回的方法显示分割是没有意义的,而在.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);
Elements links=doc.getElementsByTag(“引用”);
String crawlingNode=links.html();
crawlingNode=crawlingNode.replaceAll((?==?),“”)//删除不需要的html标记
System.out.println(爬行节点);
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);

        }

    }
公共类httptest{
静态文件;
文件夹=null;
字符串爬行节点,日期,时区,Tag=“谷歌节点”;
静态BufferedWriter=null;
静态httpht试验;
公共httptest()引发IOException{
日期=新的简化格式(“yyyy.MM.dd hh MM ss”)。格式(新日期();
文件夹=新文件(“查询/下载/”+日期+“”+时区.getDefault().getDisplayName());
file=新文件(folder.getPath()+“\\”+日期+“+标记+”.txt”);
folder.mkdir();
}
私有void GetLinks()引发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(“身份验证”、“令牌”)
.超时(3000)
.get();
元素链接=doc.getElementsByTag(“引用”);
String crawlingNode=links.html();
crawlingNode=crawlingNode.replaceAll((?==?),“”);//删除不需要的html标记
System.out.println(爬行节点);
WriteOnFile(writer,crawlingNode);
}
私有静态void OpenWriter(文件){
试一试{
writer=newbufferedwriter(newfilewriter(file));
}捕获(IOE异常){
showMessageDialog(null,“无法打开URL编写器”);
e、 printStackTrace();
}
}
私有静态void WriteOnFile(BufferedWriter编写器,字符串爬网节点){
试一试{
writer.write(爬行节点);
}捕获(IOE异常){
showMessageDialog(null,“无法写入URL节点”);
e、 printStackTrace();
}
}
专用静态无效CloseWriter(BufferedWriter-writer){
试一试{
writer.close();
}捕获(IOE异常){
showMessageDialog(null,“无法关闭URL编写器”);
系统错误println(e);
}
}
公共静态void main(字符串[]args)引发IOException{
ht=新的httptest();
OpenWriter(文件);
ht.GetLinks();
httptest.CloseWriter(writer);
}
}

您可能希望尝试在其中添加for语句,以便一次扫描每个元素

for(Element link : links)
{
       String crawlingNode = link.html();
       crawlingNode = crawlingNode.replaceAll("(?=<).*?(>=?)", ""); //Remove undesired html tags
       System.out.println(crawlingNode);
       httptest.WriteOnFile(writer, crawlingNode);
}
for(元素链接:链接)
{
String crawlingNode=link.html();
crawlingNode=crawlingNode.replaceAll((?==?),“”);//删除不需要的html标记
System.out.println(爬行节点);
WriteOnFile(writer,crawlingNode);
}

虽然我不能100%确定单个元素是否能与.html()方法一起工作。你得自己试试。让我知道它是如何运行的。

爬行节点中的行是用unix行分隔符
\n
分隔的。Windows正在使用
\r\n
,因此在记事本中看到换行符会有问题。 您可以使用其他编辑器或替换分隔符

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

替换字符串不是一个有效的解决方案。相反,我们需要创建另一个字符串,并使用
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);
}
Elements links=doc.getElementsByTag(“引用”);
String crawlingNode=links.html();
crawlingNode=crawlingNode.replaceAll((?==?),“”)//删除不需要的html标记
用于(元素链接:链接){
字符串linkText=link.text()+系统.lineSeparator();
System.out.println(linkText);
httptest.WriteOnFile(writer,linkText);
}

我打赌这就是问题所在。在将其重新排列为for语句之前,请尝试此操作。我尝试了u所说的内容和此爬网节点。替换(“\n”,System.LineSeparator());尽管它不起作用..该死-但我可以从你们写的一件事中看出,用写字板它会断线,所以如果我想读取链接,我应该将字符串作为数组,然后分离读取/n吗?哦,等等,我完全延迟了一秒钟。您正在尝试将字符串分隔为单独的行。试试这个:httptest.WriteOnFile(writer,crawlingNode+“\n”);这似乎是记事本的一个普遍问题——我做了一项研究,很多人都有这个问题。我找到了我的答案,请检查;)就像这样,它会为每个链接对象写入所有链接并进行复制,呵呵,我已经这么想了=]]但是太糟糕了。我看你已经试过上面的建议了