[英]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.