Web抓取工具网址结果不准确

时间:2014-10-09 16:20:30

标签: java http url jsoup web-crawler

我刚刚创建了我的第一个网络抓取工具,我的目标只是访问www.nhl.com,并创建一个包含每个锚点和按钮的数据库,以及它们转发的网址。

代码似乎工作正常,但我对输出有两个问题。

以下是我的数据库中的两个URL条目示例:

1。http://www.nhl.com/ice/event.htm?location=/stadiumseries/2014/chi/responsive

2。/ice/m_events.htm

为什么有些人会记录整个网址,而其他人只有第二部分? [ANSWERED]

第二个问题,例如这个行条目:

9 Players /ice/m_playersearch.htm,其格式为[id,anchor,url]

当我在浏览器中访问网站并点击“播放器”时,浏览器中的网址会变为:

http://www.nhl.com/ice/playersearch.htm?navid=nav-ply-plyrs#

其中包含我的表条目没有的第二部分(?navid=nav-ply-plyrs#

话虽如此,输入我的数据库给我的URL仍然会将我重定向到同一页面,所以这似乎不是一个错误。我只是想知道为什么/如何确定不需要URL的第二部分。

以下是我的代码的一部分:

public void crawl(String url){

    try{
        Document doc = Jsoup.connect(url).get();

        Elements pgElem = doc.select("a");
        int id = 0;

        for(Element e : pgElem){
            db.insert(id, e.text(), e.attr("href"));
            id++;
        }

        db.close();   

    }catch(IOException e){
        e.printStackTrace();
    }
}

我的插入方法:

 public void insert(int id, String anchor, String url) {

    String string = "INSERT INTO nhl (id,Anchor,URL) " + "VALUES (?, ?, ?)";
    try {
        pst=conn.prepareStatement(string);
        pst.setInt(1, id);
        pst.setString(2, anchor);
        pst.setString(3, url);
        pst.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:1)

e.attr("href")更改为e.attr("abs:href")以获取绝对网址。