精华内容
下载资源
问答
  • java爬虫爬取网页内容
    2021-04-24 13:16:52

    27b2a540a006310584df9b951c8741f5.png

    1、网络爬虫

    按照一定的规则爬取网页上的信息,通常是爬取到一些URL之后然后对这些URL放入队列在一次次的进行搜索。

    2、Java爬虫网页

    网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来。

    3、Java爬虫爬取网页内容方法:用apache提供的包// commons-httpclient-3.1.jar

    // commons-logging-1.0.4.jar

    public static String createhttpClient(String url, String param) {

    HttpClient client = new HttpClient();

    String response = null ;

    String keyword = null ;

    PostMethod postMethod = new PostMethod(url);

    //  try {

    //   if (param != null)

    //    keyword = new String(param.getBytes("gb2312"), "ISO-8859-1");

    //  } catch (UnsupportedEncodingException e1) {

    //   // TODO Auto-generated catch block

    //   e1.printStackTrace();

    //  }

    // NameValuePair[] data = { new NameValuePair("keyword", keyword) };

    // // 将表单的值放入postMethod中

    // postMethod.setRequestBody(data);

    // 以上部分是带参数抓取,我自己把它注销了.大家可以把注销消掉研究下

    try {

    int statusCode = client.executeMethod(postMethod);

    response = new String(postMethod.getResponseBodyAsString()

    .getBytes( "ISO-8859-1" ), "gb2312" );

    //这里要注意下 gb2312要和你抓取网页的编码要一样

    String p = response.replaceAll( "//&[a-zA-Z]{1,10};" , "" )

    .replaceAll( "]*>" , "" ); //去掉网页中带有html语言的标签

    System.out.println(p);

    } catch (Exception e) {

    e.printStackTrace();

    }

    return response;

    }

    Java爬虫中使用apache提供的包爬取网页内容还是很方便的,大家可以套入代码使用哦~更多java学习推荐:java教程。

    (推荐操作系统:windows10系统、java10版,thinkpad t480电脑。)

    更多相关内容
  • Java爬虫爬取网页数据

    2017-11-07 20:38:13
    此工具可用于网页数据的爬取,代码中本身就有一个demo,自行参考使用
  • java爬虫爬取网页内容,并导出到Excel

    千次阅读 2021-04-01 15:44:44
    } //可以指定网址,并且按照需求爬取前多少页的数据 public static List getInfo(String url, int month) { List weatherList = new ArrayList(); for (int i = 1; i ; i++) { try { System.out.println("url:" + ...

    准备的jar

            <!--json-->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.12.0</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.47</version>
            </dependency>
    
            <!--excel-->
            <dependency>
                <groupId>net.sourceforge.jexcelapi</groupId>
                <artifactId>jxl</artifactId>
                <version>2.6.12</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.17</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.17</version>
            </dependency>
            <!--爬虫-->
            <dependency>
                <groupId>org.jsoup</groupId>
                <artifactId>jsoup</artifactId>
                <version>1.13.1</version>
            </dependency>

    实体类:

    public class Weather {
    
        /**
         * 日期
         */
        private String date;
    
        /**
         * 最高气温
         */
        private String maxTemperature;
    
        /**
         * 最低气温
         */
        private String minTemperature;
    
        /**
         * 白天天气
         */
        private String dayTimeWeather;
    
        /**
         * 夜间天气
         */
        private String nightWeather;
    
        /**
         * 风向
         */
        private String windDirection;
    
        /**
         * 风力
         */
        private String windPower;
    
        public String getDate() {
            return date;
        }
    
        public void setDate(String date) {
            this.date = date;
        }
    
        public String getMaxTemperature() {
            return maxTemperature;
        }
    
        public void setMaxTemperature(String maxTemperature) {
            this.maxTemperature = maxTemperature;
        }
    
        public String getMinTemperature() {
            return minTemperature;
        }
    
        public void setMinTemperature(String minTemperature) {
            this.minTemperature = minTemperature;
        }
    
        public String getDayTimeWeather() {
            return dayTimeWeather;
        }
    
        public void setDayTimeWeather(String dayTimeWeather) {
            this.dayTimeWeather = dayTimeWeather;
        }
    
        public String getNightWeather() {
            return nightWeather;
        }
    
        public void setNightWeather(String nightWeather) {
            this.nightWeather = nightWeather;
        }
    
        public String getWindDirection() {
            return windDirection;
        }
    
        public void setWindDirection(String windDirection) {
            this.windDirection = windDirection;
        }
    
        public String getWindPower() {
            return windPower;
        }
    
        public void setWindPower(String windPower) {
            this.windPower = windPower;
        }
    
        @Override
        public String toString() {
            return "Weather{" +
                    "date='" + date + '\'' +
                    ", maxTemperature='" + maxTemperature + '\'' +
                    ", minTemperature='" + minTemperature + '\'' +
                    ", dayTimeWeather='" + dayTimeWeather + '\'' +
                    ", nightWeather='" + nightWeather + '\'' +
                    ", windDirection='" + windDirection + '\'' +
                    ", windPower='" + windPower + '\'' +
                    '}';
        }
    }

    测试类

    public class WeatherTest {
        public static void main(String[] args) throws FileNotFoundException, IOException {
            List<Weather> list = getInfo("http://www.tianqi234.com/2020shanghai/1yue.html", 12);
            for (Weather weather : list) {
                System.out.println(weather.toString());
            }
            testHSSFWorkbook(list);
        }
    
        //可以指定网址,并且按照需求爬取前多少页的数据
        public static List<Weather> getInfo(String url, int month) {
            List<Weather> weatherList = new ArrayList<Weather>();
            for (int i = 1; i < month + 1; i++) {
                try {
                    System.out.println("url:" + url);
                    Document doc = Jsoup.connect(url).get();
                    Elements table = doc.select(".graybox_cnt");
                    /*  Elements tbody = table.select("tbody");*/
                    Elements trList = table.select("tr");
                    //每次移除的时候,你的列表长度就会发生新的变化,所以要结合实际进行移除
                    trList.remove(0);
                    if (i > 1) {
                        trList.remove(0);
                        trList.remove(10);
                        trList.remove(10);
                        trList.remove(20);
                        trList.remove(20);
                        trList.remove(20);
                    } else {
                        trList.remove(11);
                        trList.remove(11);
                        trList.remove(21);
                        trList.remove(21);
                        trList.remove(21);
                    }
    
                    for (Element tr : trList) {
                        Elements tdList = tr.select("td");
                        Elements aList = tdList.select("a");//查询a标签
                        Weather weather = new Weather();
                        if (aList != null && aList.size() > 0) {
                            weather.setDate(aList.get(0).html().toString());
                        } else {
                            weather.setDate(tdList.get(0).html().toString());
                        }
                        weather.setMaxTemperature(tdList.get(1).html().toString());
                        weather.setMinTemperature(tdList.get(2).html().toString());
                        weather.setDayTimeWeather(tdList.get(3).html().toString());
                        weather.setNightWeather(tdList.get(4).html().toString());
                        weather.setWindDirection(tdList.get(5).html().toString());
                        weather.setWindPower(tdList.get(6).html().toString());
                        weatherList.add(weather);
                    }
    
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    
                url = "http://www.tianqi234.com/2020shanghai/" + (i + 1) + "yue.html";
            }
            return weatherList;
    
        }
    
        public static void testHSSFWorkbook(List<Weather> list) throws IOException {
            HSSFWorkbook workbook = new HSSFWorkbook();//创建excel文件(workbook)
            
            HSSFSheet sheet = workbook.createSheet("2020年上海天气统计");
            HSSFRow row = sheet.createRow(0);//创建行 从0开始
    
            HSSFCellStyle style = workbook.createCellStyle();//设置单元格样式
            style.setAlignment(HorizontalAlignment.CENTER);//水平居中
            style.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            sheet.setDefaultColumnWidth(30);
            row.setHeightInPoints(25);
            Map<String, String> map = (Map<String, String>) getMap(list.get(0));
            //设置表头
            int c = 0;
            for (String key : map.keySet()) {
                HSSFCell cell = row.createCell(c);//创建行的单元格,从0开始
                cell.setCellValue(map.get(key));//设置单元格内容
                cell.setCellStyle(style);
                c++;
            }
            Map<Integer, Weather> weatherMap = new HashMap<>();
            //除去表头
            for (int i = 1; i < list.size(); i++) {
                weatherMap.put(i, list.get(i));
            }
            for (int i = 1; i <= weatherMap.size(); i++) {
                HSSFRow rowInfo = sheet.createRow(i);
                rowInfo.setHeightInPoints(30);
                Map<String, String> map1 = (Map<String, String>) getMap(list.get(i));
                int j = 0;
                for (String key : map1.keySet()) {
                    HSSFCell cellInfo = rowInfo.createCell(j);
                    cellInfo.setCellValue(map1.get(key));
                    cellInfo.setCellStyle(style);
                    j++;
                }
            }
            FileOutputStream out = new FileOutputStream("D:\\weather1.xlsx");
            workbook.write(out);
            out.close();
    
        }
    
        /**
         * json转map
         *
         * @param object
         * @return
         */
        public static Map<?, ?> getMap(Object object) {
            if (object == null) {
                throw new RuntimeException("对象为空,转json失败");
            }
            Map<String, Object> map = new HashMap<>();
            try {
                map = (Map) JSON.parse(JSON.toJSONString(object));
            } catch (Exception e) {
                System.out.println("对象转map转换失败");
            }
            return map;
        }
    
    
    }

    效果:

     

    展开全文
  • 使用java爬取网页内容

    千次阅读 2021-07-22 14:54:57
    使用java爬取网页内容前言明确爬取对象实现需求小说名称 前言 在日常中,我们经常需要浏览网页,阅读一些内容。 但网页中并不是所有内容都是我们所需要的。 毕竟,谁都不想看的好好时突然出现一个“澳门棋牌”。 ...

    前言

    在日常中,我们经常需要浏览网页,阅读一些内容。

    但网页中并不是所有内容都是我们所需要的。
    毕竟,谁都不想看的好好时突然出现一个“澳门棋牌”。

    那么这时我们就可以爬取它的内容。


    明确爬取对象

    这里就以大家熟知的 笔*阁为例。

    打开笔*阁的首页。
    不对,打开一本小说。

    这里以《进化的四十六亿重奏》为例(我是挺推荐这本书的,还有,如果可以的话尽量支持正版。)

    请添加图片描述
    打开主页,查看源代码,我们可以从其中换取我们需要的一起。

    那我们需要什么呢?
    那我们就需要明确我们爬取的对象。

    1 小说的名称。
    2 章节名称。
    3 章节内容。

    ok,明确了对象后,那我们就需要针对这些对象进行爬取。

    实现需求

    小说名称

    首先是小说的名称。
    通过观察源代码,我们可以看到:
    请添加图片描述

    小说的名称和简介是储存在:
    请添加图片描述
    11,12行的标签中的。

    章节内容

    小说的目录 和 章节内容是储存在:请添加图片描述

    标签中的。

    我们可以将网页的内容全部存入一个字符串数组中。
    然后进行比较,确定位置。
    然后将我们需要的内容提取出来。
    在放入新的文件中。
    话不多说,上实例:

    源代码

        public static void main(String[] args){
            //确定主页链接
            String link = "https://www.biquwx.la/0_376/";
            //确定文件存放位置
            String path = "/Users/apple/Downloads/test/";
    
    
    
    
            //默认运行一次,当连接不上链接时(也就是出现SSLException异常时),runTime会+1,也就是仔运行一次
            int runTimes = 1;
            for (int runtime=0;runtime<runTimes;runtime++){
                try{
    
                    //新建URL对象
                    URL url = new URL(link);
                    //打开连接
                    URLConnection urlConnection = url.openConnection();
                    //建立Http的连接
                    HttpsURLConnection connection = (HttpsURLConnection) urlConnection;
                    //新建流
                    InputStreamReader isr = new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8);
                    BufferedReader br = new BufferedReader(isr);
                    //现在网页中的内容已经读进了BufferedReader中。
                    System.out.println("连接成功!");
    
                    //新建一个容器,容器的长度会随内容的增加而增加,不用担心数组越界的问题
                    ArrayList al = new ArrayList();
                    //while循环,一直执行直到,line == null时停止,也就是网页内容读完后停止。
                    while (true){
                        //新建字符串,用于储存一行的内容
                        String line = br.readLine();
                        //如果line == null ,则跳出循环
                        if (line == null){
                            break;
                        }
                        //如果line != null,那么把字符串添加进容器中。
                        else {
                            al.add(line);
                        }
                    }
    
                    //关闭流
                    br.close();
                    isr.close();
    
                    //while循环完毕后,网页中的内容也都被放进了容器中
                    //现在将容器中的内容放入一个字符串数组中
                    //字符串的长度就为容器的大小
                    String[] str = new String[al.size()];
                    for (int i=0;i<str.length;i++){
                        str[i] = String.valueOf(al.get(i));
                    }
    
                    //如果出现乱码,则重新运行
                    //其实,没多大用,我也不知道为什么会出现乱码。
                    //但一般等会在运行就好了
                    //如果有办法的,可以在评论中告诉我,谢谢。
                    if (!str[0].contains("<!DOCTYPE html")){
                        System.out.println(str[9]);
                        System.out.println("出现乱码,重新连接中...");
                        Thread.sleep(3000);
                        runTimes++;
                        continue;
                    }
    
                    //初始化标题
                    String name = "";
                    //初始化简介
                    String description = "";
    
                    /*
                    通过观察我们可以发现,一行的字符串中,我们所需的全在""中。
                    那么我们可以,以"为分割符,创建一个字符串数组,然后提取我们所需的。
                     */
    
                    //创建循环,判断我们所需内容
                    for (int i = 0;i<str.length;i++){
                        if (str[i].contains("property=\"og:title\"")){
                            //创建一个字符串数组,以"为分割符
                            String[] temp = str[i].split("\"");
                            //标题位于这个数组的第4位
                            name = temp[3];
                            continue;
                        }else if (str[i].contains("property=\"og:description\"")){
                            //简介不一样,它不仅占了一行,它占据了<meta property="og:description" content="/>这个标签。
                            //而随后的标签是<meta property="og:image"  那我们就可以检测这个标签,来作为结束。
    
                            //i1是用来计算开始到结束的行数的
                            int i1 = 1;
                            while (true){
                                if (str[i+i1].contains("<meta property=\"og:image\"")){
                                    for (int i2 = i;i2<i1+i;i2++){
                                        //因为只有少量字符串拼接,所以我就用了String的+
                                        description += str[i2];
                                    }
                                    break;
                                }else i1++;
                            }
    
                            //现在description不仅包含了简介还包含了标签,所以要像小说名一样操纵一下。
    
                            //创建一个字符串数组,以"为分割符
                            String[] temp = description.split("\"");
                            //标题位于这个数组的第4位
                            description = temp[3];
                        }
                    }
                    System.out.printf("小说的名字为:%n" + name + "%n");
                    System.out.printf( "小说的简介为: %n" + description);
                    System.out.println("--------------");
                    System.out.println("正在获取章节内容中");
                    //小说名 和 简介 我们都有了
                    //现在就是小说章节了
                    //依旧由观察可知,章节在<div id="list"> 标签中
                    //而每个章节的前面都会有href 和 title ,我们就从这俩下手
                    //例:<a href="3102496.html" title="目前细胞的一些数据及第一卷解释">目前细胞的一些数据及第一卷解释</a>
    
                    //现将包含章节的行提取到一个字符串数组,再进行操纵
                    //同上依旧先用容器装,在转成字符串数组
                    ArrayList al2 = new ArrayList();
                    for (int i = 0;i<str.length;i++){
                        if (str[i].contains("href") && str[i].contains("title")){
                            al2.add(str[i]);
                        }
                    }
    
                    String[] chapter = new String[al2.size()];
                    for (int i=0;i<chapter.length;i++){
                        chapter[i] = String.valueOf(al2.get(i));
                    }
                    //现在已经转完了,那么我们就可以进行操纵了
    
                    //创建文件放置目录
                    File directory = new File(path + name);
                    System.out.println("已创建文件" + directory);
    
                    for (int i=0;i<chapter.length;i++){
                        //将一个字符串以"为分割符分割
                        String[] temp = chapter[i].split("\"");
                        //章节名位于第四位
                        String chapterName = temp[3];
                        //章节链接位于第二位
                        String chapterLink = temp[1];
    
                        //首先初始化上,下一章的名称
                        String nextChapterName = "";
                        String beforeChapterName = "";
                        if (i != chapter.length-1){
                            //获取下一章的名称
                            String[] temp1 = chapter[i+1].split("\"");
                            nextChapterName =  temp1[3];
                        }
    
                        if (i != 0){
                            //获取上一章的名称
                            String[] temp2 = chapter[i-1].split("\"");
                            beforeChapterName = temp2[3];
                        }
    
                        //现在要读取章节中我们需要的内容
    
                        //创建流来输入
                        //新建一个文件,文件名为获得的章节名
                        File f = new File(path + name + "/" + chapterName + ".html");
                        System.out.print("正在创建文件" + f + "             ");
                        if (!f.exists()){
                            f.getParentFile().mkdirs();
                        }
                        try (
                                FileOutputStream fos = new FileOutputStream(f);
                                PrintWriter pw = new PrintWriter(fos)
                        ){
    
                            //新建URL对象
                            URL url1 = new URL(link + chapterLink);
                            //打开连接
                            URLConnection urlConnection1 = url1.openConnection();
                            //建立Http的连接
                            HttpsURLConnection connection1 = (HttpsURLConnection) urlConnection1;
                            //新建流
                            InputStreamReader isr1 = new InputStreamReader(connection1.getInputStream(), StandardCharsets.UTF_8);
                            BufferedReader br1 = new BufferedReader(isr1);
                            //现在网页中的内容已经读进了BufferedReader中。
                            //打开一个一个章节的源码,我们可以看正文部分前面都有空格标识符&nbsp;  所以我们可以从这个下手.
                            //例:  &nbsp;&nbsp;&nbsp;&nbsp;在城市的街道上,所有的虚民都在疯狂地奔跑着,在大地的震颤之下,它们纷纷从建筑之中逃了出来……
    
                            //用一个容器,和一个字符串数组就够了
                            //用StringBuffer更节约性能
                            ArrayList al3 = new ArrayList();
                            while (true){
                                String line = br1.readLine();
                                if (line == null){
                                    break;
                                }else {al3.add(line);}
                            }
    
                            String[] content = new String[al3.size()];
                            for (int i1= 0;i1<al3.size();i1++){
                                content[i1] = String.valueOf(al3.get(i1));
                            }
    
                            StringBuffer sb = new StringBuffer();
                            for (int i1 = 0;i1<content.length;i1++){
                                if (content[i1].contains("&nbsp;")){
                                    sb.append(content[i1]);
                                }
                            }
    
                            //我们要创建一个html文件,用于实现方向键换章。
                            //这里可以读取一个文件模版,但我懒的做了所以直接写这了.
                            pw.println("<!DOCTYPE html>");
                            pw.println("<html lang=\"en\">");
                            pw.println("<head>");
                            pw.println("    <meta charset=\"UTF-8\">");
                            pw.println("    <title>"+ chapterName + "</title>");
                            pw.println("    <script>function onDocKeydown(e) {e = e || window.event;if (e.keyCode==39) {");
                            pw.println("                window.location.href=\"" + directory + "/"+ nextChapterName + ".html" +"\";");
                            pw.println("            }else if (e.keyCode==37){");
                            pw.println("                window.location.href=\"" + directory + "/" + beforeChapterName + ".html" + "\";");
                            pw.println("            }}document.onkeydown = onDocKeydown;</script>");
                            pw.println("</head>");
                            pw.println("<body>");
                            pw.println("<div align=\"center\">");
                            pw.println("    <h1>"+ chapterName +"</h1></br></br>");
                            pw.println(sb);
                            pw.println("</div>");
                            pw.println("</body>");
                            pw.println("</html>");
                            System.out.println("文件创建完毕");
    
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
    
                } catch (Exception e) {
                    //如果异常为SSLException,那么跳出循环,在运行一次
                    if (e instanceof SSLException){
                        System.out.println("出现异常:未连接成功");
                        System.out.println("尝试再次运行...");
                        runTimes++;
                    }e.printStackTrace();
                }
            }
        }
    

    结语

    还是希望支持正版

    有问题放在评论区,若我看到了,会给你尽快回复的。

    如果文章内容有什么问题也欢迎指正

    感谢你的阅读

    展开全文
  • JAVA爬取网页内容

    2021-03-18 09:47:23
    前期准备工作:需要去查看一下要爬的网页的结构,对自己要爬的数据的标签要熟悉。操作:在页面上按F12查看标签的内容。 就是js+css+html标签的构造,我们使用比较多的是a、img这两个标签。第一个是链接,第二个是...

    在此之前,大家先了解一个Jsoup,一个html页面解析的jar包。

    如果你上面的Jsoup看完了。

    前期准备工作:需要去查看一下要爬的网页的结构,对自己要爬的数据的标签要熟悉。

    操作:在页面上按F12查看标签的内容。

    0818b9ca8b590ca3270a3433284dd417.png

    就是js+css+html标签的构造,我们使用比较多的是a、img这两个标签。第一个是链接,第二个是图片所以图片也是可以爬的~~。里面的内容也都是一个链接地址。

    其余的标签就可能是文本数据的内容了。比如说我现在想要爬的就是这个标题中的链接。

    0818b9ca8b590ca3270a3433284dd417.png

    和标题的内容。找到这里看到这个标签的href值。

    使用Jsoup的方法:Elements elements = doc.getElementsByTag("a");//找到所有a标签

    对a标签进行过滤就行了

    也可以直接获取class标签下的内容,再在这个class下找到a标签获取a标签的href属性值。

    好了就是这么简单。接下来看看代码吧。

    import java.io.BufferedWriter;

    import java.io.File;

    import java.io.FileWriter;

    import java.io.IOException;

    import org.jsoup.Jsoup;

    import org.jsoup.nodes.Document;

    import org.jsoup.nodes.Element;

    import org.jsoup.select.Elements;

    public class MySearchTest {

    private static String url = "http://blog.csdn.net";

    private static String blogName = "guoxiaolongonly";

    public static void main(String[] args) {

    getArticleListFromUrl(url+"/" + blogName);

    }

    /**

    * 获取文章列表

    * @param listurl

    */

    public static void getArticleListFromUrl(String listurl) {

    Document doc = null;

    try {

    doc = Jsoup.connect(listurl).userAgent("Mozilla/5.0").timeout(3000).post();

    } catch (IOException e) {

    e.printStackTrace();

    }

    // System.out.println(doc);

    Elements elements = doc.getElementsByTag("a");//找到所有a标签

    for (Element element : elements) {

    String relHref = element.attr("href"); // == "/"这个是href的属性值,一般都是链接。这里放的是文章的连接

    String linkHref = element.text();

    //用if语句过滤掉不是文章链接的内容。因为文章的链接有两个,但评论的链接只有一个,反正指向相同的页面就拿评论的链接来用吧

    if (!relHref.startsWith("http://") && relHref.contains("details") && relHref.endsWith("comments"))

    {

    StringBuffer sb = new StringBuffer();

    sb.append(url).append(relHref);

    System.out.println(sb.substring(0, sb.length() - 9));//去掉最后的#comment输出

    getArticleFromUrl(sb.substring(0, sb.length() - 9));//可以通过这个url获取文章了

    }

    //System.out.println(linkHref);

    if(linkHref.equals("下一页"))//如果有下一页

    {

    getArticleListFromUrl(url + relHref);//获取下一页的列表

    }

    }

    }

    /**

    * 获取文章内容

    * @param detailurl

    */

    public static void getArticleFromUrl(String detailurl) {

    try {

    Document document = Jsoup.connect(detailurl).userAgent("Mozilla/5.0").timeout(3000).post();

    Element elementTitle = document.getElementsByClass("link_title").first();//标题。 这边根据class的内容来过滤

    System.out.println(elementTitle.text());

    String filename = elementTitle.text().replaceAll("/", "或");

    Element elementContent = document.getElementsByClass("article_content").first();//内容。

    saveArticle(filename , elementContent.text(), blogName);

    // String Content =elementContent.te xt().replaceAll(" ", "\t");

    // System.out.println(elementContent.text()+"\n");

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    /**

    * 保存文章到本地

    * @param titile

    * @param content

    * @param blogName

    */

    public static void saveArticle(String titile, String content, String blogName) {

    String lujing = "d:\\MyLoadArticle\\" + blogName + "\\" + titile + ".txt";//保存到本地的路径和文件名

    File file = new File(lujing);

    if (!file.getParentFile().exists()) {

    file.getParentFile().mkdirs();

    }

    try {

    file.createNewFile();

    } catch (IOException e) {

    e.printStackTrace();

    }

    try {

    FileWriter fw = new FileWriter(file, true);

    BufferedWriter bw = new BufferedWriter(fw);

    bw.write(content);

    bw.flush();

    bw.close();

    fw.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    我封装了获取文章列表、获取文章内容保存文章内容的方法。

    大家可以设置blogName去爬你想要的文章了,比如说我:guoxiaolongonly

    这边用post模拟浏览器请求。因为直接get,页面无法加载。还有就是使用cookie,模拟用户用户页面访问操作。会的小伙伴们也可以交流一下~~

    0818b9ca8b590ca3270a3433284dd417.png 针对文本文档编码乱码问题。还希望大家自己研究一下。

    展开全文
  • java爬虫爬取网站信息

    千次阅读 2020-06-23 16:24:02
    java爬https网站内容 下载网站的证书 查看 点击检查——点击security出现如下界面 点击证书路径我们可以发现证书如下: 下载 使用IE浏览器访问该网站,点击工具——Internet选项 接下来点击导出 ...
  • 只不过浏览器进行了渲染,所以我们可以用java获得响应内容。 以下是通过HTTP编程,获取指定网页中图片的代码实现 package com.my.hyz1; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; ...
  • 主要介绍了JAVA使用爬虫抓取网站网页内容的方法,实例分析了java爬虫的两种实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • java爬虫 爬取网页信息

    千次阅读 2018-05-07 18:22:46
    今天接触到一个项目中非要让我用爬虫爬取一个学校网页的新闻页面加子页面所有文字信息,毕竟需求就是上帝,然后查询了一会之后发现并不难就是匹配字符、标签是有些麻烦 好了直接上pom.xml &lt;dependency&...
  • java爬取网页用到的一些jar

    热门讨论 2013-08-16 17:17:46
    java爬取网页用到的一些jar 具体的使用方法 看链接
  • java爬虫爬取本地html文件,提取分析出文本 Document doc2 = Jsoup.parse(html); Elements trs = doc2.select("table").select("tr"); for(int i = 0;i();i++){ Elements tds = trs.get(i).select("td"); for...
  • 1、springboot项目,引入jsoup <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <...Content.java package com.asia.pojo
  • java爬虫实战——实现简单的爬取网页数据

    千次阅读 多人点赞 2020-09-04 11:27:13
    虽然我们程序员不干爬虫的活,但是工作中确实偶尔有需要网络上的数据的时候,手动复制粘贴的话数据量少还好说,万一数据量大,浪费时间不说,真的很枯燥。 所以现学现卖研究了一个多小时写出了个爬虫程序 一、爬虫所...
  • Java爬取网页内容demo

    2020-05-27 15:04:17
    jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据,可以看作是java版的jQuery。 1. 获取数据源的...
  • 最开始采用的HttpClient获取页面+Jsoup分析页面,但是获取不到想要的页面内容,发现自己想要的数据是js生成的,HttpClient加了头和Cookie还是获取不到,最后采用的htmlunit获取页面就可以了。 WebClient webClient=...
  • 如何用java爬取网页

    2021-04-08 10:21:02
    但是大家不知道吧,我们的java也有相应的爬虫工具。今天就给大家介绍一下我们java爬虫工具。我们今天要介绍的爬虫工具,名字叫做webmagic,webmagic的架构图如下所示:如图所示,它主要分为四个部分:Downloader...
  • 当我们使用浏览器处理网页的时候,有时候是不需要浏览的,例如使用PhantomJS适用于无头浏览器,进行爬取网页数据操作。最近在进行java爬虫学习的小伙伴们有没有想过如何爬取js生成的网络页面吗?别急,本文小编将向...
  • java爬虫入门技术我们需要用到http协议 从而建立java程序和网页的连接URL url = new URL("https://www.ivsky.com/tupian/ziranfengguang/");URLConnection urlConnection=url.openConnection();urlConnection....
  • 主要介绍了Java 爬虫如何爬取需要登录的网站,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 手把手教你运用JAVA爬虫技术爬取小说

    千次阅读 多人点赞 2021-06-19 11:13:29
    二、安装Maven2.1 Maven的下载2.2 Maven的配置三、Maven项目的创建3.1Maven项目创建3.2Maven项目配置四、运用JAVA爬虫爬取网页小说4.1 准备4.2 找到要爬取的网页4.3 全部代码4.4代码详解A代码.B代码.C代码....
  • 挺乱的,临时存一下 ...import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.regex.Pa...
  • Java爬虫爬取网页数据-基于Jsoup前言一.准备二.代码(使用Jsoup的核心就两步)三.效果爬虫项目地址 前言 本文主要介绍简单的使用Jsoup爬取网页数据 框架 SpringBoot + Jsoup 每一个步骤我都是进行独立封装起来,方便...
  • Java爬虫爬取京东商城

    千次阅读 2022-02-23 23:23:00
    旨在通过使用java爬虫,提取网络中的各种商品信息,并收集的商品信息建立统一数据模型存储数据,通过数据模型描述商品的基本属性。如spu,sku,商品描述,价格等信息,同时需要剔除非必要信息,做到精准分析。根据所...
  • 它是搜索引擎的重要组成部分,传统的爬虫程序从初始网页到多个URL,在对网页进行爬行的过程中,它不断地从当前网页中提取新的URL并将其放入队列中,一起跟着爱站技术频道小编来看看Java-爬取网页并且保存的方法吧!...
  • Java爬取简单的网页内容和图片

    千次阅读 2020-07-26 11:42:25
    Java爬取简单的网页内容和图片 根据java网络编程相关的内容,使用jdk提供的相关类可以得到url对应网页的html页面代码。 针对得到的html代码,通过使用正则表达式即可得到我们想要的内容。 比如,我们如果想得到一个...
  • java 网页爬虫,jsoup
  • java爬取网页的数据并存入数据库

    千次阅读 2021-09-02 15:55:23
    Dong * @create 2021/9/2 15:56 * @desc Jsoup爬取网页数据 **/ @Data @TableName("menu") public class Menu extends Model<Menu> { @TableId(value = "id") private String id; @TableField("title") private ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,966
精华内容 5,186
关键字:

java爬虫爬取网页内容