Java网络爬虫,基于Jsoup实现 (快速爬取)

1:网络爬虫

1.1:为什么要网络爬虫
在现在这个大数据时代,信息瞬息万变,在我们做的项目时可能因为某些原因,不会去产生这些数据,但是我们项目中又需要某些数据,这个时候我们就需要网络爬虫了

1.2:网络爬虫原理
那么什么是网络爬虫呢,顾名思义就是通过我们代码操作去爬取别的网站的数据,然后提取出来变成我们自己的数据,网络爬虫主要就是通过一个url地址链接然后返回一个页面元素,我们在通过提取,把数据提取出来,下面就是流程图
在这里插入图片描述

Jsoup网络爬虫
虽然使用python语言比较擅长网络爬虫,但是Java其实相对来说在网络爬取也并不会比python差太多,我就告诉大家使用Jsoup网络爬取,下面使用依赖

<!-- jsoup网络爬虫 -->
    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.9.2</version>
    </dependency>

Jsoup快速上手

常用方法:

    /**
     * Jsoup.connect()写入需要爬取数据的链接
     * get()获取数据返回Document元素
     * timeout()爬取网站的超时时间
     */
	 Document doc = Jsoup.connect("https://info.sporttery.cn/football/match_list.php").timeout.(5000)get(); 
	
	 Elements elementById = doc.getElementsByClass("cili-item");//获取div class里面有cili-item的div
    getElementsByTag("a");//获取 Element 对象里面有什么样的的标签的数据
	attr("href")//获取href标签里面的数据,
	attributes()获取所有属性
	text()获取内容
	html()获取元素内的HTML html(String value)设置元素内的HTML内容
	outerHtml()获取元素外HTML内容
	data()获取数据内容
	 
	 //文本操作
	append(String html) //添加元素
	appendText(String text), prependText(String text)
	appendElement(String tagName), prependElement(String tagName)
	html(String value)	

	//Selector选择器概述
	tagname: 通过标签查找元素,比如:ans|tag: 通过标签在命名空间查找元素,比如:可以用 fb|name 语法来查找 <fb:name> 元素
	#id: 通过ID查找元素,比如:#logo.class: 通过class名称查找元素,比如:.masthead
	[attribute]: 利用属性查找元素,比如:[href]
	[^attr]: 利用属性名前缀来查找元素,比如:可以用[^data-] 来查找带有HTML5 Dataset属性的元素
	[attr=value]: 利用属性值来查找元素,比如:[width=500]
	[attr^=value], [attr$=value], [attr*=value]: 利用匹配属性值开头、结尾或包含属性值来查找元素,比如:[href*=/path/]
	[attr~=regex]: 利用属性值匹配正则表达式来查找元素,比如: img[src~=(?i)\.(png|jpe?g)]

下面代码是我之前写一个爬取bt兔子的代码,他主要就是获取磁力链接的一些信息

我写爬虫一般是获取他们的页面数据,在获取需要提取元素的div在来获取div里面的数据,然后进行数据提取,然后把数据封装到一个对象里面,封装对象后你就能做一些操作了,比如返回给前端,或者保存到数据库

/**
 * 搜索返回数据   bt兔子   bttuzi.vip
 * @param name 搜索名字
 * @param pageNum 页数
 * @return
 */
@ResponseBody
@RequestMapping("/reptile.do")
public MsgInfo reptiles(String fileName,Integer pageNum) {
    MsgInfo msgInfo=new MsgInfo();
    try {
        Document doc = Jsoup.connect("https://www.btcilicili.me/s/"+fileName+"/time-"+pageNum+".html").timeout(5000).get();
        String text = doc.text();
        if(doc!=null && text!=null && !text.trim().equals("")) {
            List<SearchFileVO> list=new ArrayList<>();
            
            Elements elementById = doc.getElementsByClass("cili-item");
             //循环div
             for (Element element : elementById) {
                SearchFileVO  searchFileVO=new SearchFileVO();
                Elements elementsByTag = element.getElementsByTag("a");//获取a链接
                Element element2 = elementsByTag.get(1);
                    String path = element2.attr("href");
                    Elements elementsByTag2 = element.getElementsByTag("li");
                    String title = elementsByTag2.text();
                    
                    Element element3 = element.getElementsByClass("item-bar").get(0);//分割获得文件大小和文件时间
                    String nr = element3.text();
                    String[] split3 = nr.split(":");
                    String  creDate =split3[1];
                    String  fileSize=split3[2];
                    String[] split4 = creDate.split("\\s+");
                    String[] split5 = fileSize.split("\\s+");
                    
                    searchFileVO.setCreDate(split4[0]);
                    searchFileVO.setFileSize(split5[0]+split5[1]);
                    
                    searchFileVO.setMagneticLink(path);//磁力链接
                    searchFileVO.setTitle(title);

                    list.add(searchFileVO);
                    
            }
 
             msgInfo.setObj(list);
             msgInfo.setSuccess(true);
        }
         
    } catch (IOException e) {
        logger.error("--dataGet--error-"+"->", e);
        msgInfo.setMsg("获取数据失败");
        return msgInfo;
    }
    
    return msgInfo; 
}

如果你有不懂话可以加我,有什么问题的话可以加我微信:18473437400

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值