我有一个程序我需要它做的就是从文本文件中提取URL并将它们保存到另一个文本文件中。代码调用ExtractHTML2.getURL2(url,input);这只是提取给定链接的HTML代码(它正常工作并且不需要在此处包含其代码)。
编辑:代码解析页数,在每个页面上,将其html代码保存在文本文件中,然后解析此文本文件,以提取10个链接。
现在,以下代码假设解析提取的HTML代码并提取URL。这对我不起作用。它不提取任何东西。
已编辑代码:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import java.io.*;
public class ExtractLinks2 {
public static void getLinks2(String url, int pages) throws IOException {
{
Document doc;
Element link;
String elementLink=null;
int linkId=1; //represent the Id of the href tag inside the HTML code
//The file that contains the extracted HTML code for the web page.
File input = new File
("extracted.txt");
//To write the extracted links
FileWriter fstream = new FileWriter
("links.txt");
BufferedWriter out = new BufferedWriter(fstream);
// Loop to traverse the pages
for (int z=1; z<=pages; z++)
{
/*get the HTML code for that page and save
it in input (extracted.txt)*/
ExtractHTML2.getURL2(url, input);
//Using parse function from JSoup library
doc = Jsoup.parse(input, "UTF-8");
//Loop for 10 times to extract 10 links per page
for(int e=1; e<=10; e++)
{
link = doc.getElementById("link-"+linkId); //the href tag Id
System.out.println("This is link no."+linkId);
elementLink=link.absUrl("href");
//write the extracted link to text file
out.write(elementLink);
out.write(","); //add a comma
linkId++;
} //end for loop
linkId=1; //reset the linkId
}//end for loop
out.close();
} //end the getLinks function
} //end IOExceptions
} //end ExtractDNs class
正如我所说,我的程序不会提取URL。我对Jsoup.parse的语法有疑问。参考:http://jsoup.org/cookbook/input/load-document-from-file有一个可选的第三个参数,我忽略它,因为我认为在我的情况下不需要它。我需要从文本文件中提取而不是html页面。
如果输入的话,我的程序可以提取href标签文本:eURL = elem.text();但我不需要文本,我需要URL本身,例如:如果我有以下内容:
<a id="link-1" class="yschttl spt" href="/r/_ylt=A7x9QXi_UOlPrmgAYKpLBQx.;
_ylu=X3oDMTBzcG12Mm9lBHNlYwNzcgRwb3MDMTEEY29sbwNpcmQEdnRpZAM-/SIG=1329l4otf/
EXP=1340719423/**http%3a//www.which.co.uk/technology/computing/guides/how-to-buy
-the-best-laptop/" data-bk="5040.1">How to <b>buy</b> the best <b>laptop</b>
- <b>Laptop</b> <wbr />reviews - Computing ...</a>
如果有办法,我只需要“www.which.co.uk”或更好的“which.co.uk”。
为什么上述程序不提取网址以及如何解决问题?
答案 0 :(得分:0)
问题在于这一行:
link = doc.getElementById("link-"+linkId);
应该是:
link = doc.getElementById("link-" + Integer.toString(linkId));
由于linkId
是整数,getElementById
将字符串作为参数。所以,我必须首先将Id转换为int,因此getElementById
的输入变为以下形式:link-1,link-2等。