首页 > 编程语言 >Java爬虫可以非常溜

Java爬虫可以非常溜

时间:2023-05-09 10:02:17浏览次数:57  
标签:非常 Java String 爬虫 cssQuery public crawler

Java 爬虫是一种利用 Java 语言编写的网络爬虫,主要用于从互联网上获取数据。在 Java 中,常用的爬虫框架有 Jsoup、HttpClient、Selenium 等。

其中 Jsoup 是一种解析 HTML 文档的 Java 库,可以方便地进行 HTML 解析和内容提取。HttpClient 是 Apache 组织开发的 Java HTTP 客户端库,可以模拟 HTTP 请求和响应。Selenium 是一个自动化测试工具,可以模拟用户在浏览器中的操作,对于需要进行登录等操作的网站比较有用。

使用 Java 爬虫需要注意一些法律和道德规范,如不得爬取他人的隐私数据、不得对网站造成过大的负担等。同时,也需要注意反爬虫机制,如设置 User-Agent、使用代理 IP 等方式来规避被封禁的风险。

xxl-crawler是某位大佬开源的一个java爬虫,熟悉java语言的用起来可以非常顺手。

0x01:新建工程,并在pom.xml文件引入

<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-crawler</artifactId>
    <version>1.2.2</version>
</dependency>

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.11.2</version>
</dependency>

0x02:编写页面数据对象

在此推荐两款工具,可以直观迅速的获取页面元素的Jquery cssQuery表达式。

Chrome DevTools:首先定位元素位置,然后从Element选中选中元素,点击右键选择“Copy + Copy selector”即可;

Chrome DevTools使用如图

Jquery Selector Helper(Chrome插件):首先定位元素位置,然后从Element右侧打开Selector界面,然后定位元素即可;

package com.spider.page.vo;

import com.xuxueli.crawler.annotation.PageFieldSelect;
import com.xuxueli.crawler.annotation.PageSelect;
import com.xuxueli.crawler.conf.XxlCrawlerConf.SelectType;


@PageSelect(cssQuery = "body > div.container > div > div > table > tbody > tr")
public class GzGemasComCnPageMainVo {

    @PageFieldSelect(cssQuery = "td:nth-child(1)")
    private String code;

    @PageFieldSelect(cssQuery = "td:nth-child(2)")
    private String title;

    @PageFieldSelect(cssQuery = "td:nth-child(3)")
    private String status;

    @PageFieldSelect(cssQuery = "td:nth-child(4)")
    private String date;

    @PageFieldSelect(cssQuery = "td:nth-child(2) > a", selectType=SelectType.ATTR, selectVal="onclick")
    private String url;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }



}

0x03:创建爬虫爬取数据

XxlCrawler crawler = new XxlCrawler.Builder()
                .setUrls("http://gz.gemas.com.cn/portal/article/proList.shtml?proType=guquan&typeGz=G3T3&proSource=&pageIndex=1")
                .setAllowSpread(false) //允许扩散爬取,将会以现有URL为起点扩散爬取整站
                .setThreadCount(1)
                .setPageParser(new PageParser<GzGemasComCnPageMainVo>() {
                    @Override
                    public void parse(Document html, Element pageVoElement, GzGemasComCnPageMainVo gzGemasComCnPageVo) {
                        // 解析封装 PageVo 对象
                        String pageUrl = html.baseUri();
                        logger.info("pageUrl: " + pageUrl);
                        logger.info("Code: " + gzGemasComCnPageVo.getCode() + ", Title: " + gzGemasComCnPageVo.getTitle() 
                            + ", sdate: " + gzGemasComCnPageVo.getDate() + ", url: " + gzGemasComCnPageVo.getUrl()
                            + ", status: " + gzGemasComCnPageVo.getStatus());
                    }
                })
                .build();
crawler.start(true);

标签:非常,Java,String,爬虫,cssQuery,public,crawler
From: https://www.cnblogs.com/q-q56731526/p/17384012.html

相关文章

  • Java的数据类型
    基本数据类型|类别|数据类型|包装类|默认值||数值类型|整数类型|byte|Byte|0||数值类型|整数类型|short|Short|0||数值类型|整数类型|int|Integer|0||数值类型|整数类型|long|Long|0L|......
  • Java操作TIFF
    一般Java通过javax.imageio.ImageIO操作jpeg与png没有问题,但是操作tiff时就会报错,此时只要引入如下的包即可,不需要修改代码即可兼容tiff<dependency><groupId>com.twelvemonkeys.imageio</groupId><artifactId>imageio-core</artifactId></dependency>......
  • 【故障补牢】贪吃的 Bing 爬虫,限量供应的应对措施
    相对于【故障公告】,【故障补牢】分享的是园子在发生故障后采取的亡羊补牢措施。在上次被微软Bing爬宕机后(详见【故障公告】被放出的Bing爬虫,又被爬宕机的园子),我们采取了2个应对措施,然后解除了对Bing爬虫的屏蔽。措施1:限流——采用滑动窗口进行限流我们之前采用的限流措......
  • Java 定时任务quartz
    Java定时任务quartz1.java自带java.util.Timer实现定时任务2.使用线程池(ScheduledThreadPool-java.util.concurrent.ScheduledExecutorService)实现定时任务3.使用注解@Scheduled实现定时任务4.使用Quartz定时任务调度器4.1Quartz特点4.2核心概念4.3常用对象4.4实例......
  • java堆简单介绍
    java对象实例是放置堆上,但不是说所有的对象实例都在对上,可能有些对象实例位于本地方法区 下面说说堆的特点 堆是属于java虚拟机中内存最大的一部分堆是jvm中所有线程可以共享的垃圾收集器管理的主要区域来源于java堆 java堆可以细分为新生代和老年代java堆在物理存储上......
  • Python爬虫零基础教学第二天
    Python爬虫高级开发/大数据抓取/从入门到精通/商业项目实战(2)开始时间2023-05-08 21:26:37结束时间2023-05-08 23:08:20一、调试模式的介绍 鼠标右键,在出现的选项中找到检查进入调试模式,或者按键盘上的f12键进入调试模式。  二、Cookie使用cookie进行会话保持 ......
  • Java-Day-17( 集合( Collection 里的 List、Set ) )
    Java-Day-17集合先前用于保存多个数据使用的是——数组长度开始必须指定,且不能更改保存的必须为同一类型的元素使用数组进行增删元素的代码较为麻烦例:扩容的要先建新数组,再拷贝原数据、添加新对象引出集合可以动态保存任意多个对象,使用比较方便提供了一系列......
  • java.lang.NullPointerException解决方案,以及发生的原因。
    其实解决方案,倒是挺简单的,eclipse的console里,报错的地方点一下,就知道在哪一行了。真正要注意的是怎么避免这种情况的发生。通常情况下,这种错,发生在取数据的过程,比方从数据库查询数据,亦或者说是,发生在数据传输的过程中。譬如1packagetest;23importjava.util.List;......
  • 【Azure 存储服务】Java Storage SDK 调用 uploadWithResponse 代码示例(询问ChatGTP
    问题描述查看JavaStorageSDK,想找一个 uploadWithResponse 的示例代码,但是通过全网搜索,结果没有任何有帮助的代码。使用最近ChatGPT来寻求答案,得到非常有格式的内容:问:javaazurestorageaccounttouseuploadWithResponse答:TousetheuploadWithResponsemethodw......
  • Java数组
    Java数组Java中,数组是用来存储固定大小的同类型元素。声明数组变量声明语法:dataType[]arrayRefVar;//首选方法dataTypearrayRefVar[];//效果相同,但不是首选例:double[]myList;doublemyList[];创建数组语法:arrayRefVar=newdataType[arraySize];......