近期做java爬虫,爬某房产网站的时候,该网站对IP监测非常敏感,故需要对应的解决方案,且被封后不是405页面,而是一个纯白的空页面,所以爬下来的document是空的,在解析的时候才报错。
解决方案是去西刺代理爬取IP,对IP进行筛选,筛选出可用的IP,放进redis做一IP池,在爬取页面的时候,遇到解析报错时,进行更换IP操作,再爬一次document,反复几次,连续报错就continue掉,如果解析不报错就break弹出继续解析。
private static String IPPOOLURL = "https://www.xicidaili.com/wn/";
Jedis jedis = new Jedis("127.0.0.1", 6379);
List<String> ipList = jedis.lrange("ipPool", 0, -1);
// 爬虫前先获取IP池,存入redis备用,判断该池是否存在,爬10页西刺的数据
if (CollectionTools.isBlank(ipList)) {
for (int i = 1; i < 11; i++) {
if (i == 1) {
getIpPool(IPPOOLURL, jedis);
} else {
getIpPool(IPPOOLURL + i, jedis);
}
}
ipList = jedis.lrange("ipPool", 0, -1);
}
jedis.close();
/**
* 爬IP池
*/