使用Jsoup的Web Scraping只能运行一半的时间

时间:2011-08-11 14:58:23

标签: java web-scraping jsoup

我最近一直在玩Java Jsoup库,试图更好地理解网页抓取(从网站上提取数据)。但似乎我设法放在一起的代码只是部分时间的功能。我的代码是问题,还是某些网站可能有措施阻止网页抓取?

这是完成所有'魔术'的课程:

import java.io.IOException;
import org.jsoup.*;
import org.jsoup.nodes.Document;




public class HTMLParser {

private Document d;
private String url;
private String content;



    public HTMLParser(String url){
    this.url = url; 
     connect();
     parse();
     display();

    }


    private void connect(){ 
        try{
        d = Jsoup.connect(url).get();   
        }catch(IOException e){}
    }

    private void parse(){
        content = d.body().text();

    }

    private void display(){
        System.out.println(content);

    }

}

3 个答案:

答案 0 :(得分:0)

如果网站动态加载数据,您可能也会遇到问题。特别是在这个AJAX时代。 JSoup是否忽略robot.txt,或者你可以这样做吗?

理想情况下,你需要渲染页面,然后刮掉它。

该软件显然呈现网页:http://lobobrowser.org/java-browser.jsp 当然还有一个API,可以让你查看网页的结构。

答案 1 :(得分:0)

您可以使用https://github.com/subes/invesdwin-webproxy及其HtmlUnit Javascript无头浏览器支持等待页面在实际进行解析之前呈现/加载数据/执行JS /执行其Ajax魔法。

答案 2 :(得分:-1)

您可以在没有Jsoup的情况下进行网络抓取。

public class Trick {
public static void main(String[] args) {
String str;
URLConnection con;

//必须在这里尝试抓取或扔掉

con =  new URL("ANY URL").openConnection();
Scanner scanner = new Scanner(con.getInputStream());
scanner.useDelimiter(INPUT ANY DELIMETER);
str = scanner.next();
scanner.close();



str = str.substring(content.indexOf("NAME OF CLASS OF ID") + INPUT A NUMBER 
WHICH SIGNIFIES HOW MANY INDEXES YOU WANT IT TO NOT CONSIDER STARTING FROM THE 
LEFT);
String wow = str.substring(0, content.indexOf("WHERE YOU WANT IT TO END OR STOP 
SCRAPING"));
System.out.println(wow);
str = str.substring(content.indexOf("WHERE YOU WANT IT TO END OR STOP 
SCRAPING"));
}
//System.out.println(wow);}}