java - 使用 elem.absUrl 提取 URL

标签 java parsing networking jsoup web-crawler

我有一个程序,我需要它做的就是从文本文件中提取 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 页面中提取。

如果我输入:eURL =elem.text();,我的程序就能够提取 href 标签文本。但我不需要文本,我需要 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”。

为什么上述程序不提取 URL 以及如何纠正该问题?

最佳答案

问题出在这一行:

link = doc.getElementById("link-"+linkId);

应该是:

link = doc.getElementById("link-" + Integer.toString(linkId)); 

由于 linkId 是整数,而 getElementById 将字符串作为参数。因此,我必须首先将 Id 转换为 int,因此 getElementById 的输入变为以下形式:link-1、link-2 等。

关于java - 使用 elem.absUrl 提取 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11203511/

相关文章:

xml - 使用 xmlpath.v2 golang 获取节点的值

c - RL_ARM的TCP模式下close和abort的区别

c - 查看是否通过 tcp 传递了消息

java - 这种使用移位运算的除法近似是如何工作的?

java - 用于从对象和/或 JSON 填充 HTML 模板的库

java - 使用 Joda 的 DateTimeFormatter 解析时如何忽略时区?

networking - SR & GBN : Out-of-window ACKs

java - Java异常层次结构背后的基本原理

java - org.springframework.web.multipart.commons.CommonsMultipartFile#transferTo() 方法内存安全吗?

java - 如何将值映射到文本?