[英]Web Crawler using jsoup
我正在开发一个网络爬虫,但我卡住了,因为我无法获得所有可访问的链接,这是我的代码:
public class SNCrawler extends Thread {
Specific s;
HashSet<String> hs = new HashSet<String>();
public SNCrawler(Specific s)
{
this.s = s;
}
public void crawl(String url) throws IOException {
Document doc = Jsoup.connect(url).get();
Elements links = doc.select("a");
for (Element link : links)
{
if(isSuitable(link.attr("href")) && !hs.contains(link.attr("abs:href")))
{
hs.add(link.attr("href"));
crawl(link.attr("href"));
}
}
}
public boolean isSuitable(String site)
{
boolean myBool = false;
if(site.startsWith("http://www.svensktnaringsliv.se/") && !SNFilter.matcher(site).matches())
if(site.contains(".pdf")) {
hs.add(site);
myBool=true;
}else{
hs.add(site);
myBool=true;
}
return myBool;
}
private static final Pattern SNFilter = Pattern.compile(".*((/staff/|medarbetare|play|/member_organizations/|/sme_committee/|rm=print|/contact/|/brussels-office/|/about-us|/newsletter/|/advantagesweden/|service=print|#)).*");
@Override
public void run()
{
try {
crawl("http://www.svensktnaringsliv.se/english/");
for(String myS : hs)
{
System.out.println(myS);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
当程序到达网站的这一部分时,它不会从那里获得任何链接,这个页面也是一样的,从那里我只得到 2 或 3 个链接,我已经看了很多小时的代码,但无法真正弄清楚为什么我被卡住了
当程序到达网站的这一部分时,它不会从那里获得任何链接
爬网功能应仅适用于绝对网址。 试试下面的函数:
public void crawl(String url) throws IOException {
Document doc = Jsoup.connect(url).get();
Elements links = doc.select("a");
for (Element link : links) {
String foundUrl = link.attr("abs:href").toLowerCase();
if( isSuitable(foundUrl) && ( !hs.contains(foundUrl) ) ) {
hs.add(foundUrl);
crawl(foundUrl);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.