我刚刚创建了我的第一个网络抓取工具,我的目标只是访问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();
}
}
答案 0 :(得分:1)
将e.attr("href")
更改为e.attr("abs:href")
以获取绝对网址。