我最近一直在玩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);
}
}
答案 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);}}