HtmlUnit爬取代理时出现DefaultCssErrorHandler报错如何解决?
解决HtmlUnit爬取代理时的CSS解析警告问题
嘿,我来帮你搞定这个CSS警告的问题!这些警告其实是因为目标网站的grid.css文件内容有问题——它返回的不是标准的CSS代码,可能混了HTML标签,导致HtmlUnit的CSS解析器报错了。不过别担心,这不会影响你爬取代理IP和端口的核心逻辑,只是日志有点烦人而已。如果想彻底消除这些警告,可以试试下面的两种方法:
方法一:自定义CSS错误处理器,忽略所有警告和错误
你可以给WebClient设置一个空的CssErrorHandler,这样就不会输出那些烦人的警告了:
List<HtmlElement> ips = null; List<HtmlElement> ports = null; ArrayList<String> proxies = new ArrayList<>(); HtmlPage page = null; String baseUrl = "http://www.freeproxylists.net/"; WebClient client; try { client = new WebClient(); client.getOptions().setJavaScriptEnabled(false); // 添加这一行,忽略CSS错误和警告 client.setCssErrorHandler(new SilentCssErrorHandler()); page = client.getPage(baseUrl); ips = page.getByXPath("//table[@class='DataGrid']/tbody/tr/td[position()=1]/text()"); ports = page.getByXPath("//table[@class='DataGrid']/tbody/tr/td[position()=2]/text()"); for(int i=0; i<ips.size(); i++){ String proxy = ips.get(i) + ":" + ports.get(i); proxies.add(proxy); System.out.println(proxy); } } catch(Exception e){ System.out.println(e); }
方法二:直接禁用CSS解析(更简单)
既然你只需要爬取HTML里的IP和端口,完全不需要处理CSS样式,直接禁用CSS解析就好了:
List<HtmlElement> ips = null; List<HtmlElement> ports = null; ArrayList<String> proxies = new ArrayList<>(); HtmlPage page = null; String baseUrl = "http://www.freeproxylists.net/"; WebClient client; try { client = new WebClient(); client.getOptions().setJavaScriptEnabled(false); // 禁用CSS解析 client.getOptions().setCssEnabled(false); page = client.getPage(baseUrl); ips = page.getByXPath("//table[@class='DataGrid']/tbody/tr/td[position()=1]/text()"); ports = page.getByXPath("//table[@class='DataGrid']/tbody/tr/td[position()=2]/text()"); for(int i=0; i<ips.size(); i++){ String proxy = ips.get(i) + ":" + ports.get(i); proxies.add(proxy); System.out.println(proxy); } } catch(Exception e){ System.out.println(e); }
另外,我帮你把代码的缩进和格式调整了一下,看起来更清晰啦~
内容的提问来源于stack exchange,提问作者Massimo Simone
相关产品推荐
相关产品推荐

