我正在使用Jsoup编写一个爬虫程序,这是我得到的HTTP错误:
org.jsoup.HttpStatusException: HTTP error fetching URL. Status=404, URL=https://www.mkyong.com/spring-boot/spring-boot-hibernate-search-example/%E2%80%9Chttp:/wildfly.org/downloads/
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:760)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:757)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:706)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:299)
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:288)
at testing.DefinitelyNotSpiderLeg.crawl(DefinitelyNotSpiderLeg.java:31)
at testing.DefinitelyNotSpider.search(DefinitelyNotSpider.java:33)
at testing.Test.main(Test.java:9)
我阅读了有关此错误的所有其他类似问题和解决方案,因此我将其解决方案应用到我的代码中,但当Jsoup连接到网址时,我仍然会遇到相同的错误。
这是我用于抓取的方法:
public boolean crawl(String url)
{
try
{
Document htmlDocument = Jsoup.connect(url)
.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1")
.referrer("http://www.google.com")
.timeout(1000*5) //it's in milliseconds, so this means 5 seconds.
.get();
Elements linksOnPage = htmlDocument.select("a[href]");
for(Element link : linksOnPage)
{
String a =link.attr("abs:href");
if(a.startsWith(url)) {
this.links.add(a);
}
}
}catch (NullPointerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (HttpStatusException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}
任何想法的人???
答案 0 :(得分:0)
这是因为网址不正确: -
在您的代码中,您使用的是网址 - https://www.mkyong.com/spring-boot/spring-boot-hibernate-search-example/%E2%80%9Chttp:/wildfly.org/downloads/
我可以在堆栈跟踪的第一行看到
org.jsoup.HttpStatusException: HTTP error fetching URL. Status=404, URL=https://www.mkyong.com/spring-boot/spring-boot-hibernate-search-example/%E2%80%9Chttp:/wildfly.org/downloads/
实际上找不到: - )
答案 1 :(得分:0)
问题不在于代码,问题在于您正在解析的网页中存在的链接。
这是包含更多链接的原始页面。当您抓取网页时,它会为您提供所有链接。 https://www.mkyong.com/spring-boot/spring-boot-hibernate-search-example/
并且超链接中的代码显示为 - <a href="“http://wildfly.org/downloads/“" target="“_blank”">official website</a>
如果您注意到此url会产生问题,因为它会出现在其中的额外引号,因此它会附加此引号url和基本url togther并且输出为 - https://www.mkyong.com/spring-boot/spring-boot-hibernate-search-example/%E2%80%9Chttp:/wildfly.org/downloads/
你作为
https://www.mkyong.com/spring-boot/spring-boot-hibernate-search-example/%E2%80%9Chttp:/wildfly.org/downloads/
进入JSOUP。因此,要在抓取网页时解决您的问题,您必须执行处理并删除不必要的内容,并将所需的网址http:/wildfly.org/downloads/
与搞砸的网址分开或处理代码中的失败。希望它能给你更好的想法。