Getting Real reptil reptil 3 ---

Conseguir reptil 1 --- hablar de rastreador web

2 --- Conseguir reptil reptiles WebMagic marco

Getting Real reptil reptil 3 ---

combate reptil

      3.1 Requisitos

        Un período de tiempo desde el día **** arrastrándose blog de documentación, el artículo se almacena en la base de datos.

      Listo para digital 3.2

        Los siguientes son **** cada dirección de canal:

        Aquí primera preparar dos tablas:

        Lista de canales:

        

       mesa de artículo: 

        

        Tb_channel añadir registros a la tabla:

         

      3.3  de codificación

             3.3.1 Módulo de escritura

        ( 1 ) crear el proyecto IDEA springboot (no se explica en detalle aquí), crear módulos article_crawler , la introducción de la dependencia

  <dependencies>
        <dependency>
            <groupId>us.codecraft</groupId>
            <artifactId>webmagic-core</artifactId>
            <version>0.7.3</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>us.codecraft</groupId>
            <artifactId>webmagic-extension</artifactId>
            <version>0.7.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
 </dependencies>

        ( 2 ) crear un perfil application.yml 

server:
  port: 9015
spring:
  application:
    name: article-crawler #指定服务名
  datasource:
    driverClassName: com.mysql.jdbc.Driver
    url: jdbc:mysql://****:3306/test_article?characterEncoding=UTF8
    username: ****
    password: ****
  jpa:
    database: MySQL
    show-sql: true
  redis:
    host: ****
    password: ****

        (3) crear una clase de arranque

@SpringBootApplication
@EnableScheduling
public class ArticleCrawlerApplication {

    public static void main(String[] args) {

        SpringApplication.run(ArticleCrawlerApplication.class);
    }

    @Value("${spring.redis.host}")
    private String redis_host;

    @Value("${spring.redis.password}")
    private String redis_password;

    @Bean
    public IdWorker idWorker(){
        return  new IdWorker(1,1);
    }

    @Bean
    public RedisScheduler redisScheduler(){
        JedisPoolConfig config = new JedisPoolConfig();// 连接池的配置对象
        config.setMaxTotal(100);// 设置最大连接数
        config.setMaxIdle(10);// 设置最大空闲连接数
        JedisPool jedisPool=new JedisPool(config,redis_host,6379,20000,redis_password);
        return new RedisScheduler(jedisPool);
    }

        (4) las clases de entidad y la interfaz de acceso a datos (no explicar aquí)

             3.3.2 Clase de rastreo   

        Creación artículo arrastrándose clase ArticleProcessor

/**
 * 文章爬取类
 */
@Component
public class ArticleProcessor implements PageProcessor {
    @Override
    public void process(Page page) {
        page.addTargetRequests(  page.getHtml().links().regex("https://blog.csdn.net/[a-z 0-9 -]+/article/details/[0-9]{8}").all());
        //文章标题
        String title=page.getHtml().xpath("//*[@id=\"mainBox\"]/main/div[1]/div/div/div[1]/h1").get();
        String content=page.getHtml().xpath("//*[@id=\"article_content\"]/div[2]").get();
        if(title!=null && content!=null){
            page.putField("title" ,title );
            page.putField("content",content);
        }else{
            page.setSkip(true);//跳过
        }

    }

    @Override
    public Site getSite() {
        return Site.me().setRetryTimes(3000).setSleepTime(100);
    }
}

             3.3.3 clase de almacenamiento 

        Crear una clase de almacenamiento de artículos ArticleDbPipeline , es responsable para el rastreo de los datos almacenados en la base de datos

@Component
public class ArticleDbPipeline implements Pipeline {

    @Autowired
    private ArticleDao articleDao;

    @Autowired
    private IdWorker idWorker;


    private String channelId;//频道ID

    public void setChannelId(String channelId) {
        this.channelId = channelId;
    }

    @Override
    public void process(ResultItems resultItems, Task task) {
        String title=resultItems.get("title");//取出标题
        String content=resultItems.get("content");//内容
        Article article=new Article();
        article.setId(idWorker.nextId()+"");
        article.setChannelid(channelId);
        article.setTitle(title);
        article.setContent(content);
        articleDao.save(article);
    }
}

             3.3.4 clase Task

        Crear una clase de tareas, de acuerdo @Scheduled establece el rastreo de temporización

/**
 * 任务类
 */
@Component
public class ArticleTask {

    @Autowired
    private ArticleProcessor articleProcessor;

    @Autowired
    private ArticleDbPipeline articleDbPipeline;

    @Autowired
    private RedisScheduler redisScheduler;

    /**
     * 爬取AI文章
     */
    @Scheduled(cron = "0 15 15 * * ?")
    public void aiTask(){
        System.out.println("开始爬取CSDN文章");
        Spider spider =Spider.create(articleProcessor);
        spider.addUrl("https://blog.csdn.net/nav/ai");
        articleDbPipeline.setChannelId("ai");
        spider.addPipeline(articleDbPipeline);
        spider.setScheduler(redisScheduler);
        spider.start();
    }
}

         springboot proyecto de ejecución, la consulta de los datos de base de datos, se puede ver la base de datos de almacenamiento de datos.

         Por supuesto, lo anterior es sólo una simple entrada de la ingeniería de los reptiles, la producción de lo anterior se aplica a la necesidad real de establecer un Proxy IP, complejo de verificación más acerca de los códigos de operación, no a explicar aquí, está interesado en los zapatos de los niños, se puede estudiar a su propio.

Publicado 41 artículos originales · ganado elogios 47 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/u014526891/article/details/102702299
Recomendado
Clasificación