繁体   English   中英

Web 使用 Jsoup 进行抓取只能在一半时间内运行

[英]Web Scraping with Jsoup only functioning half the time

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

这是执行所有“魔术”的 class:

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);

    }

}

您可以使用https://github.com/subes/invesdwin-webproxy及其 HtmlUnit Javascript 无头浏览器支持来等待页面渲染/加载数据/执行 JS/执行其 Z3EB7106C3477A90E6 之前的魔法

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

理想情况下,您需要渲染页面,然后将其刮掉。

This software apparently renders web pages: http://lobobrowser.org/java-browser.jsp And there's certainly an API, which might allow you to look into the webpage's structure.

您可以在没有 Jsoup 的情况下进行 web 刮擦。

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);}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM