public class craw {
public static void main(String[] args) throws IOException{
Map<String, String> map = new HashMap<>();
int m=0;
String filename1;//一级目录名
String filename2;
String filename3;
String path="C:\\Bird";
int size;//多页情况
boolean flag=true;//设立标志位,因为只有第一张图会点进去爬两张介绍信息,其他图都不用爬
File myPath = new File(path);
if ( !myPath.exists()){//若此目录不存在,则创建
myPath.mkdir();
System.out.println("创建文件夹路径为:"+ path);
}
String responseContent1 = HttpClientUtil.getInstance().sendHttpPost("https://birdnet.cn/atlas.php");
Document document1=Jsoup.parse(responseContent1);
Elements getclass=document1.getElementsByClass("pih");
Elements search=getclass.select("#search_from_1");
Elements els1=search.select("[name='collect_1'] > option");//获得collect1里的值
for(Element el1: els1){
if(el1.attr("value")!=""){//排除了请选择选项
map.put("collect_1", el1.attr("value"));
filename1=el1.text();//开始创建一级文件夹
String responseContent2 = HttpClientUtil.getInstance().sendHttpPost("https://birdnet.cn/atlas.php?mod=show&action=atlaslist", map);
Document document2=Jsoup.parse(responseContent2);
Elements els2=document2.select("#collect_2> option");//获取collect2中的值
for (Element el2: els2) {
if(el2.attr("value")!=""){//这是进入第三层,过滤掉“请选择”这个选项
map.put("collect_2", el2.attr("value"));
filename2=el2.text();
String responseContent3 = HttpClientUtil.getInstance().sendHttpPost("https://birdnet.cn/atlas.php?mod=show&action=atlaslist", map);
Document documentcol3=Jsoup.parse(responseContent3);
Elements els3=documentcol3.select("#collect_3> option");//获取collect3中的值,到这列表数据就爬完了
for (Element el3: els3) {
try{
if(el3.attr("value")!=""){
filename3=el3.text();
try {
File dir = new File("C:\\Bird"+"\\"+filename1+"\\"+filename2+"\\"+filename3);
if (!dir.exists()) {
dir.mkdirs();
}
}
}//第二个for循环结束
}
}//第一个for循环结束
}
}
这里我把路径设置为File("C:\Bird"+"\"+filename1+"\"+filename2+"\"+filename3);
mkdirs和mkdir是不一样的,mkdirs可以创建该文件,如果该文件父目录不存在,则一并创建,所以路径设置完成直接mkdirs就可以创建多级目录。
图片3.png
网友评论