Java 如何在Jsoup中使用html()方法划分行
我在Jsoup中通过标记捕获元素时遇到了一个问题。返回写入Java 如何在Jsoup中使用html()方法划分行,java,hyperlink,jsoup,elements,Java,Hyperlink,Jsoup,Elements,我在Jsoup中通过标记捕获元素时遇到了一个问题。返回写入String crawlingNode=links.html()中的links.html()方法在.txt文件中写入整个字符串,不带空格或行分割。但是,在控制台中,它显示了每行划分的链接。因此,我需要询问是否有一种方法可以使用html()方法在.txt文件中写入每行的链接分割?因为对于我来说,控制台上返回的方法显示分割是没有意义的,而在.txt文件中,我也可以这样做 ps:很抱歉没有给出一个较短的版本,但是代码是完全可运行的。关注 Ele
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”);这似乎是记事本的一个普遍问题——我做了一项研究,很多人都有这个问题。我找到了我的答案,请检查;)就像这样,它会为每个链接对象写入所有链接并进行复制,呵呵,我已经这么想了=]]但是太糟糕了。我看你已经试过上面的建议了