我 非常了解网络(即http)或JSoup。我正在使用JSoup从url获取元标记内容。我收到了错误
Connection closed unexpectedly by server at URL: http://blahblah
这是我的代码
Document doc = Jsoup.connect(url).get();
Elements metas = doc.getElementsByTag("meta");
...
我如何"配置" JSoup只是抓取网页的内容,关闭连接,然后继续解析获得的内容?我问这样的问题,因为我想连接的关闭是由于它花了太长时间。或者是别的什么?就像服务器知道它不是人类呼叫者那样?假设该网站是cnn或其他什么,我正在尝试解析元标记内容的新闻文章。不,我没有爬行:我得到了一个网址,我正在筛选那一页。
答案 0 :(得分:1)
可能是您必须发送一些标题数据,如下所示。 请试一试。
Document doc = Jsoup
.connect(url.trim())
.timeout(3000)
.header("Host", "someip")
.header("Connection", "keep-alive")
.header("Content-Length", "111")
.header("Cache-Control", "max-age=0")
.header("Accept",
"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
.header("User-Agent",
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36")
.header("Content-Type", "application/x-www-form-urlencoded")
.header("Referer", url.trim())
.header("Accept-Encoding", "gzip,deflate,sdch")
.header("Accept-Language", "en-US,en;q=0.8,ru;q=0.6")
.userAgent("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36")
.get();
答案 1 :(得分:1)
我完全不明白为什么,但是当我这样做时,问题就停止了
Connection connection = Jsoup.connect(url);
Document doc = connection.get();
Elements metas = doc.getElementsByTag("meta");
...
而不是
Document doc = Jsoup.connect(url).get();
Elements metas = doc.getElementsByTag("meta");
...
这对我来说完全没有意义。但是它就是这样啊。我听说过“构造者逃跑”,这就是导致我进行分离的原因。虽然这可能不是一回事,但是一些类似的伏都教可能会在我不明白的情况下发生。