HK仅輝 发表于 2020-11-20 12:15

简单的静态页面java爬虫

本帖最后由 HK仅輝 于 2020-11-20 12:43 编辑

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

import java.io.*;
import java.net.URL;

public class pc {

      public static void main(String[] args) throws IOException {
                // TODO Auto-generated method stub
                long t1=System.currentTimeMillis();
                //访问目标网址
                Connection connection1=Jsoup.connect("https://desk.3gbizhi.com/");
                //连接成功后获取Document对象
                Document document1= connection1.get();
                Element elementDiv=document1.selectFirst("");
                Element elementDiv1=elementDiv.selectFirst("");//搜索class=cl r   标签
                Element elementUL=elementDiv1.selectFirst("");
                Elements elementLis=elementUL.select("li");//通过找到的ul 搜索ul里面的所有li标签
                for(Element elementLi:elementLis) {//遍历所有找到的li
                        Element elementA=elementLi.selectFirst("a");//搜索li里的a标签               
                        String herURL=elementA.attr("href");//把a标签中的 href属性的值获取到
                        //System.out.println(herURL);
                        Element elementADiv=elementA.selectFirst("div");//把a标签里的标签找到
                        String innerName= elementADiv.text();//把标签里的文字获取到
                        
                        
                        
                        System.out.println("创建"+innerName+"文件夹");
                        File file=new File("E://桌面//img//"+innerName);
                        if(!file.exists()){//如果文件夹不存在
                              file.mkdir();//创建文件夹
                        }
                        
                        Connection connection2=Jsoup.connect(herURL);//访问新的小图连接
                        Document document2=connection2.get();//
                        Element elementDiv2=document2.selectFirst("");
                        Element elementUl=elementDiv2.selectFirst("");
                        Elements elementLI=elementUl.select("li");//搜索ul里的li标签
                        for(Element elementLIS:elementLI) {
                              Element elementDivName=elementLIS.selectFirst("");
                              String divName= elementDivName.text();
                              System.out.println("下载"+divName);

                              Element elementAA=elementLIS.selectFirst("a");//搜索li里的a标签      
                              String herURLA=elementAA.attr("href");//把a标签中的 href属性的值获取到
                              //System.out.println(herURLA);
                              
                              Connection connection3=Jsoup.connect(herURLA);//访问图片下载的连接   showcontw mtw
                              Document document3=connection3.get();      
                              Element elementDiv3=document3.selectFirst("");

                              Element elementAa=elementDiv3.selectFirst("");//搜索li里的a标签
                              String xiaURL=elementAa.attr("href");
                              //System.out.println(xiaURL);
                              
                              
                              URL url=new URL(xiaURL);
                              InputStream is=url.openStream();
                              FileOutputStream fos=new FileOutputStream("E://桌面//img//"+innerName+"//"+divName+".jpg");
                              byte[] b=new byte;
                              int count=is.read(b);
                              while(count!=-1) {
                                        fos.write(b,0,count);
                                        fos.flush();
                                        count=is.read(b);      
                           }                        
                              fos.close();
                              is.close();      
                        }
                }
               
                long t2=System.currentTimeMillis();
                double a=(t2-t1)/1000;
                System.out.println("下载完毕"+"用时:"+a+"s");
      }
}

BaconOle 发表于 2020-11-20 12:28

原来用c++也写过一个爬虫,加了一个用哈希表和布隆过滤器配合来防止重复抓去相同的页面,这东西得多线程,不然效率很慢。

shr123 发表于 2020-11-20 12:36

HK仅輝 发表于 2020-11-20 12:33
怎么编辑,多加些注释?
小白,没发过多少帖子

你要学会怎么插入代码而不是把代码直接搞上来
就比如这样
.annotation system Ldalvik/annotation/InnerClass;
    accessFlags = 0x609
    name = "AnimationListener"
.end annotation

shr123 发表于 2020-11-20 12:22

楼主重新编辑一下吧

HK仅輝 发表于 2020-11-20 12:29

BaconOle 发表于 2020-11-20 12:28
原来用c++也写过一个爬虫,加了一个用哈希表和布隆过滤器配合来防止重复抓去相同的页面,这东西得多线程, ...

刚开始学着写,就懂个爬取静态页面{:1_924:}

HK仅輝 发表于 2020-11-20 12:33

shr123 发表于 2020-11-20 12:22
楼主重新编辑一下吧

怎么编辑,多加些注释?
小白,没发过多少帖子{:1_904:}

52pojie666z 发表于 2020-11-20 13:26

BaconOle 发表于 2020-11-20 19:45

HK仅輝 发表于 2020-11-20 12:29
刚开始学着写,就懂个爬取静态页面

可以从页面中用匹配字符串的方式抽取url,用url获取ip地址,向这个ip发送get请求,他又会给你返回个页面,循环往复,只要根页面选的好,理论上能爬去所有网页。

songjing 发表于 2021-9-27 17:57

感谢大哥,刚在你的基础上爬了一下我想要的素材
页: [1]
查看完整版本: 简单的静态页面java爬虫