Java爬取先知论坛文章

Java爬取先知论坛文章0x00前言上篇文章写了部分爬虫代码,这里给出一个完整的爬取先知论坛文章代码,用于技术交流。0x01代码实现pom.xml加入依赖:<dependencie

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

Java爬取先知论坛文章

0x00 前言

上篇文章写了部分爬虫代码,这里给出一个完整的爬取先知论坛文章代码,用于技术交流。

0x01 代码实现

pom.xml加入依赖:

<dependencies>

        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.11.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.7</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>





    </dependencies>

实现代码

实现类:

package xianzhi;

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

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class Climbimpl implements Runnable {
    private String url ;
    private int pages;
    private String filename;



    Lock lock = new ReentrantLock();

    public Climbimpl(String url, int pages,String filename) {
        this.url = url;
        this.pages = pages;
        this.filename = filename;
    }

    public void run() {
        File file = new File(this.filename);

        boolean mkdir = file.mkdir();

        if (mkdir){
            System.out.println("目录已创建");
        }

        lock.lock();

//        String url = "https://xz.aliyun.com/";

        for (int i = 1; i < this.pages; i++) {
            try {

            String requesturl = this.url+"?page="+i;
            Document doc = null;
            doc = Jsoup.parse(new URL(requesturl), 10000);
            Elements element = doc.getElementsByClass("topic-title");
            List<String> href = element.eachAttr("href");
                for (String s : href) {
                    try{
                        Document requests = Jsoup.parse(new URL(this.url+s), 100000);
//                        String topic_content = requests.getElementById("topic_content").text();
                        String titile = requests.getElementsByClass("content-title").first().text();
                        System.out.println("已爬取"+titile+"->"+this.filename+titile+".html");


                        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(this.filename+titile+".html"));
                        bufferedOutputStream.write(requests.toString().getBytes());
                        bufferedOutputStream.flush();
                        bufferedOutputStream.close();


                    }catch (Exception e){
                        System.out.println("爬取"+this.url+s+"报错"+"报错信息"+e);
                    }
                }


            } catch (IOException e) {
                e.printStackTrace();
            }


        }
        lock.unlock();

    }
}


main类:

package xianzhi;

public class TestClimb {
    public static void main(String[] args) {
        int Threadlist_num = 10; //线程数
        String url = "https://xz.aliyun.com/";  //设置url
        int pages = 10; //读取页数
        String path = "D:\\paramss\\";  //设置保存路径

        Climbimpl climbimpl = new Climbimpl(url,pages,path);
        for (int i = 0; i < Threadlist_num; i++) {
            new Thread(climbimpl).start();

        }
    }
}

Java爬取先知论坛文章

0x03 结尾

该爬虫总体的代码都比较简单。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119947.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月12日 上午7:00
下一篇 2021年12月12日 上午7:00


相关推荐

  • 怎么理解JS Promise

    怎么理解JS Promise      由于昨天发了一篇关于setTimeout的文章,里面提到了Promise,那篇文章里没有解释Promise的用法和含义,因为昨天的我还没太懂Promise,所以没有在那篇文章继续解释Promise,然后今天的我总算是对Promise有所理解了,然后我来谈谈我学到的Promise的知识,因为是个人的理解,所以会不全面,请多包涵。一、何为Promise在MDNwebdo…

    2022年6月11日
    41
  • java 登陆拦截器_java 登录拦截器

    java 登陆拦截器_java 登录拦截器首先创建一个FilterServlet类下面代码packagecom.group.users.util;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.Se…

    2022年6月3日
    37
  • “苹果税”降了;小红书封禁AI托管账号;大众计划裁员5万人;华莱士退市| Morketing周刊380期

    “苹果税”降了;小红书封禁AI托管账号;大众计划裁员5万人;华莱士退市| Morketing周刊380期

    2026年3月15日
    1
  • 超详细总结之Word2Vec(一)原理推导[通俗易懂]

    超详细总结之Word2Vec(一)原理推导[通俗易懂]本章是介绍Word2Vec的原理推导部分,后面还会有基于TensorFlow的Word2Vec代码实现讲解。一、什么是Word2Vec?2013年,Google团队发表了word2vec工具。word2vec工具主要包含两个模型:跳字模型(skip-gram)和连续词袋模型(continuousbagofwords,简称CBOW),以及两种高效训练的方法:负采样(negatives…

    2022年5月17日
    35
  • VC6的SDK:Microsoft Platform SDK February 2003下载地址「建议收藏」

    VC6的SDK:Microsoft Platform SDK February 2003下载地址「建议收藏」据说是最后一个支持VC6R的SDK,我在项目中出现如下错误:errorLNK2001:unresolvedexternalsymbol_CLSID_ConnectionManager明明包含了这些头文件,也链接了LIB。。。#include//启用、禁用网卡#pragmacomment(lib,”ole32.lib”)VC6使用WMI

    2022年6月4日
    134
  • JavaScript Array(数组)对象中指定元素的删除

    JavaScript Array(数组)对象中指定元素的删除js在前台界面中举足轻重,在使用js删除数组时遇到一些问题(详见删除元素),参考很多大神的资料,现把常用的函数总结出来,以备不时之需。遇到的问题是,在table中有N行元素,并且存在父子关系,父行的id=“id_1”,子行的id=“id_1_1“,子行的子行id=”id_1_2”,依次类推,当我点击父行时会把所有的子行删除,当点击子行会把子行的子行删除,这样我就需要获取子行的id的最后一

    2022年7月14日
    98

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号