标签: jsoup

我在Jsoup中得到一个SocketTimeoutException:读取超时


当我尝试使用Jsoup解析大量HTML文档时,我得到一个SocketTimeoutException.
例如,我有一个链接列表:

<a href="www.domain.com/url1.html">link1</a>
<a href="www.domain.com/url2.html">link2</a>
<a href="www.domain.com/url3.html">link3</a>
<a href="www.domain.com/url4.html">link4</a>
Run Code Online (Sandbox Code Playgroud)

对于每个链接,我解析链接到URL的文档(来自href属性)以获取这些页面中的其他信息.
所以我可以想象它需要很多时间,但是如何关闭这个例外呢?
这是整个堆栈跟踪:

java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(Unknown Source)
    at java.io.BufferedInputStream.fill(Unknown Source)
    at java.io.BufferedInputStream.read1(Unknown Source)
    at java.io.BufferedInputStream.read(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at java.net.HttpURLConnection.getResponseCode(Unknown Source)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:381)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:364)
    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:143)
    at org.jsoup.helper.HttpConnection.get(HttpConnection.java:132)
    at app.ForumCrawler.crawl(ForumCrawler.java:50)
    at Main.main(Main.java:15)
Run Code Online (Sandbox Code Playgroud)

谢谢你的哥们!

编辑: 哼......抱歉,刚刚找到了解决方案:

Jsoup.connect(url).timeout(0).get();
Run Code Online (Sandbox Code Playgroud)

希望对别人有用...... :)

java jsoup

99
推荐指数
2
解决办法
6万
查看次数

使用jsoup将html转换为纯文本时如何保留换行符?

我有以下代码:

 public class NewClass {
     public String noTags(String str){
         return Jsoup.parse(str).text();
     }


     public static void main(String args[]) {
         String strings="<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN \">" +
         "<HTML> <HEAD> <TITLE></TITLE> <style>body{ font-size: 12px;font-family: verdana, arial, helvetica, sans-serif;}</style> </HEAD> <BODY><p><b>hello world</b></p><p><br><b>yo</b> <a href=\"http://google.com\">googlez</a></p></BODY> </HTML> ";

         NewClass text = new NewClass();
         System.out.println((text.noTags(strings)));
}
Run Code Online (Sandbox Code Playgroud)

我有结果:

hello world yo googlez
Run Code Online (Sandbox Code Playgroud)

但我想打破界限:

hello world
yo googlez
Run Code Online (Sandbox Code Playgroud)

我查看了jsoup的TextNode#getWholeText()但我无法弄清楚如何使用它.

如果<br>我解析了标记中的a ,那么如何在结果输出中获得换行符?

java jsoup

95
推荐指数
9
解决办法
5万
查看次数

如何"扫描"一个网站(或页面)的信息,并将其带入我的程序?

好吧,我正在试图弄清楚如何从网页中提取信息,并将其带入我的程序(用Java).

例如,如果我知道我想要信息的确切页面,为了简单起见,Best Buy项目页面,我如何从该页面获得我需要的相应信息?喜欢标题,价格,描述?

这个过程甚至会被称为什么?我不知道甚至开始研究这个.

编辑:好的,我正在为JSoup(由BalusC发布的那个)运行测试,但我一直收到这个错误:

Exception in thread "main" java.lang.NoSuchMethodError: java.util.LinkedList.peekFirst()Ljava/lang/Object;
at org.jsoup.parser.TokenQueue.consumeWord(TokenQueue.java:209)
at org.jsoup.parser.Parser.parseStartTag(Parser.java:117)
at org.jsoup.parser.Parser.parse(Parser.java:76)
at org.jsoup.parser.Parser.parse(Parser.java:51)
at org.jsoup.Jsoup.parse(Jsoup.java:28)
at org.jsoup.Jsoup.parse(Jsoup.java:56)
at test.main(test.java:12)
Run Code Online (Sandbox Code Playgroud)

我有Apache Commons

html java web-scraping jsoup

51
推荐指数
3
解决办法
9万
查看次数

jsoup发布和cookie

我正在尝试使用jsoup登录网站,然后抓取信息,我遇到问题,我可以成功登录并从index.php创建一个文档,但我无法在网站上获取其他页面.我知道我需要在发布后设置一个cookie,然后在我尝试在网站上打开另一个页面时加载它.但是我该怎么做?以下代码允许我登录并获取index.php

Document doc = Jsoup.connect("http://www.example.com/login.php")
               .data("username", "myUsername", 
                     "password", "myPassword")
               .post();
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用apache httpclient来做到这一点,但我不想这样做.

java screen-scraping jsoup

49
推荐指数
2
解决办法
6万
查看次数

如何为Jsoup添加代理支持?

我是Java的新手,我的第一个任务是解析大约10,000个URL并提取一些信息,为此我使用Jsoup并且它工作正常.

但现在我想为它添加代理支持.代理也有用户名和密码.

谁能帮我这个?

java jsoup

39
推荐指数
5
解决办法
4万
查看次数

jsoup - 删除所有格式和链接标记,仅保留文本

假设我有一个像这样的html片段:

<p> <span> foo </span> <em> bar <a> foobar </a> baz </em> </p>
Run Code Online (Sandbox Code Playgroud)

我想从中提取的是:

foo bar foobar baz
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:如何从html中删除所有包装标签,并获得与html中相同顺序的文本?正如您在标题中看到的,我想使用jsoup进行解析.

重音html的示例(注意'á'字符):

<p><strong>Tarthatatlan biztonsági viszonyok</strong></p>
<p><strong>Tarthatatlan biztonsági viszonyok</strong></p>
Run Code Online (Sandbox Code Playgroud)

我想要的是:

Tarthatatlan biztonsági viszonyok
Tarthatatlan biztonsági viszonyok
Run Code Online (Sandbox Code Playgroud)

这个html不是静态的,通常我只想要一个通用html片段的每个文本都以解码的人类可读形式,宽度换行符.

html java jsoup

39
推荐指数
3
解决办法
4万
查看次数

如何使用Java解析Talend中的数据(来自以前生成的.txt文件)?

我在Talend中有一个进程,它获取页面的搜索结果,保存html并将其写入文件,如下所示:

在此输入图像描述

最初我有一个两步过程,用Java解析HTML文件中的日期.这是代码:它工作并将其写入mysql数据库.这是基本上完全正确的代码.(我是初学者,抱歉缺乏优雅)

package org.jsoup.examples;

import java.io.*;   

import org.jsoup.*;
import org.jsoup.nodes.*;
import org.jsoup.select.Elements;

import java.io.IOException;


public class parse2 {       
    static parse2 parseIt2 = new parse2();
    String companyName = "Platzhalter";
    String jobTitle = "Platzhalter";
    String location = "Platzhalter";
    String timeAdded = "Platzhalter";

    public static void main(String[] args) throws IOException {
        parseIt2.getData();
    }

    // 
    public void getData() throws IOException {
        Document document = Jsoup.parse(new File("C:/Talend/workspace/WEBCRAWLER/output/keywords_SOA.txt"), "utf-8");
        Elements elements = document.select(".joblisting");
        for (Element element : elements) {
            // Parse Data into Elements
            Elements jobTitleElement …
Run Code Online (Sandbox Code Playgroud)

java parsing talend jsoup

39
推荐指数
1
解决办法
3168
查看次数

Jsoup:如何获取图像的绝对URL?

有没有办法在jsoup中提取图像绝对网址,就像有人可以获得链接的绝对网址一样?

考虑以下图像元素 http://www.example.com/

<img src="images/chicken.jpg" width="60px" height="80px">
Run Code Online (Sandbox Code Playgroud)

我想得到http://www.example.com/images/chicken.jpg.我该怎么办?

jsoup

36
推荐指数
2
解决办法
3万
查看次数

JSoup UserAgent,如何设置正确?

我正在尝试解析facebook的首页,JSoup但我总是得到移动设备的HTML代码而不是普通浏览器的版本(在我的情况下是Firefox 5.0).

我正在设置我的用户代理:

doc = Jsoup.connect(url)
      .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0")
      .get();
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?

编辑:

我刚刚解析了http://whatsmyuseragent.com/,看起来用户代理正在运行.现在,为什么网站http://www.facebook.com/在使用JSoup和我的浏览器时会返回不同的版本,这让我更加困惑.两者都使用相同的用户....

我现在也注意到了其他一些网站上的这种行为.如果你能向我解释问题是什么,我会非常高兴.

jsoup

36
推荐指数
3
解决办法
5万
查看次数

(如何)我可以使用JSoup下载图像?

我已经知道图像的位置了,但为了简单起见,我想用JSoup本身下载图像.(这是为了简化获取cookie,推荐人等)

这是我到目前为止:

//Open a URL Stream
Response resultImageResponse = Jsoup.connect(imageLocation).cookies(cookies).ignoreContentType(true).execute();

// output here
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(new java.io.File(outputFolder + name));
//BufferedWriter out = new BufferedWriter(new FileWriter(outputFolder + name));
out.write(resultImageResponse.body());          // resultImageResponse.body() is where the image's contents are.
out.close();
Run Code Online (Sandbox Code Playgroud)

java jsoup

33
推荐指数
1
解决办法
3万
查看次数

标签 统计

jsoup ×10

java ×8

html ×2

parsing ×1

screen-scraping ×1

talend ×1

web-scraping ×1