java爬虫框架(java项目开发实例)

目标 爬取全景网图片,并下载到本地 收获 通过本文,你将复习到: IDEA创建工程IDEA导入jar包爬虫的基本原理Jsoup的基本使用File的基本使用FileOutputStream的基本使用ArrayList的基本使用foreach的基本使用 说明 爬虫所用的HTM解析器为Jsoup。Jsoup可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及…

目标

爬取全景网图片,并下载到本地

收获

通过本文,你将复习到:

  • IDEA创建工程
  • IDEA导入jar包
  • 爬虫的基本原理
  • Jsoup的基本使用
  • File的基本使用
  • FileOutputStream的基本使用
  • ArrayList的基本使用
  • foreach的基本使用

说明

爬虫所用的HTM解析器为Jsoup。Jsoup可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

Jsoup相关API整理见文末附录一。

开始

一、前端分析

1、使用Chrome或其他浏览器,打开全景网,按F12进入调试模式,分析网页结构。(这里选的是“创意”=>“优山美地”)

手把手教你从零开始用Java写爬虫

2、找规律,看图片对应的结构是什么。可以发现,每个图片的结构都如下图红框所示。

手把手教你从零开始用Java写爬虫

3、找到结构后再找图片链接。进一步分析后发现,图片链接可以是下图红框部分。

手把手教你从零开始用Java写爬虫

4、复制到浏览器打开看看验证下。(好吧,访问这个URL直接给我下载了…)

手把手教你从零开始用Java写爬虫
手把手教你从零开始用Java写爬虫

5、前端部分分析完毕,接下来就可以用Java编码了!

二、爬取思路

通过Java向全景网发送GET请求,以获取HTML文件。Jsoup解析后寻找class=item lazy的a标签,他的child节点(即<img>)就是我们要找的目标节点了,搜索到的应当是一个ArrayList。然后遍历集合,从中搜寻图片的URL,并下载到本地保存。(更深一步,可以下载完一页后,继续下载后一页,直至全部下完。本文直讲下载第一页。提示一下,链接后面的topic/1其实就是当前页数)

三、Java编码

1、先下载Jsoup jar包,并导入到IDEA工程中。

手把手教你从零开始用Java写爬虫
手把手教你从零开始用Java写爬虫

2、新建Java工程。

手把手教你从零开始用Java写爬虫
手把手教你从零开始用Java写爬虫
手把手教你从零开始用Java写爬虫

3、简单测试下get请求,若请求成功,则进入下一步;若报错,检查URL是否带了中文。

注意:链接没给,否则文章审核不过,注意自己添加!!!

package com.sxf;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class Main {
    public static void main(String[] args) {
        try {
            Document doc = Jsoup.connect(\"\").get(); //这里加链接
            System.out.println(doc);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
手把手教你从零开始用Java写爬虫

4、寻找class为item lazy的元素,找到他的child节点,返回ArrayList。并将图片的URL单独提取出来。

注意:链接没给,否则文章审核不过,注意自己添加!!!

注意:链接没给,否则文章审核不过,注意自己添加!!!
手把手教你从零开始用Java写爬虫

5、我们先尝试用Jsoup下载一张图片试试效果。

注意:链接没给,否则文章审核不过,注意自己添加!!!

// 获取response
Connection.Response imgRes = Jsoup.connect(URLS.get(0)).ignoreContentType(true).execute();
FileOutputStream out = (new FileOutputStream(new java.io.File(\"demo.jpg\")));
// imgRes.body() 就是图片数据
out.write(imgRes.bodyAsBytes());
out.close();

可以看到在当前工程路径下,生成了demo.jpg图片,并且显示正常!

手把手教你从零开始用Java写爬虫

6、接下来,我们要创建一个文件夹,用来专门存放图片。

File相关API整理见文末附录二。

//当前路径下创建Pics文件夹
File file = new File(\"Pics\");
file.mkdir();
System.out.println(file.getAbsolutePath());
手把手教你从零开始用Java写爬虫

7、接下来开始遍历图片并下载。由于图片较多,为了简单起见,我们保存图片时候的名称,就从1开始依次增吧。

// 遍历图片并下载
int cnt = 1;
for (String str : URLS) {
    System.out.println(\">> 正在下载:\"+str);
    // 获取response
    Connection.Response imgRes = Jsoup.connect(str).ignoreContentType(true).execute();
    FileOutputStream out = (new FileOutputStream(new java.io.File(file, cnt+\".jpg\")));
    // imgRes.body() 就是图片数据
    out.write(imgRes.bodyAsBytes());
    out.close();
    cnt ++;
}

运行结果

手把手教你从零开始用Java写爬虫

到此编码部分也结束了,完整代码见文末附件三!

附录一

Jsoup(HTML解析器)

继承关系:Document继承Element继承Node。TextNode继承Node。
->java.lang.Object
  ->org.jsoup.nodes.Node
    ->org.jsoup.nodes.Element
      ->org.jsoup.nodes.Document
html文档:Document
元素操作:Element
节点操作:Node

官方API:https://jsoup.org/apidocs/org/jsoup/nodes/Document.html
  
一、解析HTML并取其内容
  Document doc = Jsoup.parse(html);

二、解析一个body片断
  Document doc = Jsoup.parseBodyFragment(html);
  Element body = doc.body();

三、从一个URL加载一个Document
  Document doc = Jsoup.connect(\"http://example.com\")
    .data(\"query\", \"Java\")
    .userAgent(\"Mozilla\")
    .cookie(\"auth\", \"token\")
    .timeout(3000)
    .post();
  String title = doc.title();

四、从一个文件加载一个文档
  File input = new File(\"/tmp/input.html\");
  // baseUri 参数用于解决文件中URLs是相对路径的问题。如果不需要可以传入一个空的字符串
  Document doc = Jsoup.parse(input, \"UTF-8\", \"http://example.com/\");  

五、使用DOM方法来遍历一个文档
  1、查找元素
  getElementById(String id)
  getElementsByTag(String tag)
  getElementsByClass(String className)
  getElementsByAttribute(String key) // 和相关方法
  // 元素同级
  siblingElements()
  firstElementSibling()
  lastElementSibling()
  nextElementSibling()
  previousElementSibling()
  // 关系
  parent()
  children()
  child(int index)

  2、元素数据
  // 获取属性attr(String key, String value)设置属性
  attr(String key)
  // 获取所有属性
  attributes()
  id()
  className()
  classNames()
  // 获取文本内容text(String value) 设置文本内容
  text()
  // 获取元素内HTMLhtml(String value)设置元素内的HTML内容
  html()
  // 获取元素外HTML内容
  outerHtml()
  // 获取数据内容(例如:script和style标签)
  data()
  tag()
  tagName()

  3、操作HTML和文本
  append(String html)
  prepend(String html)
  appendText(String text)
  prependText(String text)
  appendElement(String tagName)
  prependElement(String tagName)
  html(String value)
  
六、使用选择器语法来查找元素(类似于CSS或jquery的选择器语法)
  //带有href属性的a元素
  Elements links = doc.select(\"a[href]\"); 
  //扩展名为.png的图片
  Elements pngs = doc.select(\"img[src$=.png]\");
  //class等于masthead的div标签
  Element masthead = doc.select(\"div.masthead\").first(); 
  //在h3元素之后的a元素
  Elements resultLinks = doc.select(\"h3.r > a\"); 

七、从元素抽取属性、文本和HTML
  1、要取得一个属性的值,可以使用Node.attr(String key) 方法
  2、对于一个元素中的文本,可以使用Element.text()方法
  3、对于要取得元素或属性中的HTML内容,可以使用Element.html(), 或 Node.outerHtml()方法
  4、其他:
    Element.id()
    Element.tagName()
    Element.className()
    Element.hasClass(String className)

附录二

File类

*java.io.File类用于表示文件或目录。*
创建File对象:
// 文件/文件夹路径对象
File file = new File(\"E:/...\");
// 父目录绝对路径 + 子目录名称
File file = new File(\"...\" ,\"\");
// 父目录File对象 + 子目录名称  
File file = new File(\"...\",\"...\");
file.exists():判断文件/文件夹是否存在
file.delete():删除文件/文件夹
file.isDirectory():判读是否为目录
file.isFile():判读是否为文件夹
file.mkdir():创建文件夹(仅限一级目录)
file.mkdirs():创建多及目录文件夹(包括但不限一级目录)
file.createNewFile():创建文件
file.getAbsolutePath():得到文件/文件夹的绝对路径
file.getName():得到文件/文件夹的名字
file.String():同样是得到文件/文件夹的绝对路径等于file.getAbsolutePath()
file.getParent():得到父目录的绝对路径

附录三

完整代码

package com.sxf;
​
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
​
public class Main {
    public static void main(String[] args) {
        try {
            Document doc = Jsoup.connect(\"https://www.quanjing.com/creative/topic/1\").get();
            // 寻找class为item lazy的元素,返回ArrayList。
            Elements items = doc.getElementsByClass(\"item lazy\");
            ArrayList<String> URLS = new ArrayList<>();
            // 将图片的URL单独提取出来。
            for (Element i : items) {
                URLS.add(i.child(0).attr(\"src\"));
            }
            // 当前路径下创建Pics文件夹
            File file = new File(\"Pics\");
            file.mkdir();
            String rootPath = file.getAbsolutePath();
            System.out.println(\">> 当前路径:\"+rootPath);
            // 遍历图片并下载
            int cnt = 1;
            for (String str : URLS) {
                System.out.println(\">> 正在下载:\"+str);
                // 获取response
                Connection.Response imgRes = Jsoup.connect(str).ignoreContentType(true).execute();
                FileOutputStream out = (new FileOutputStream(new java.io.File(file, cnt+\".jpg\")));
                // imgRes.body() 就是图片数据
                out.write(imgRes.bodyAsBytes());
                out.close();
                cnt ++;
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

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

(0)
上一篇 2022年5月9日 下午7:09
下一篇 2022年5月9日 下午7:11

相关推荐

  • 优化网站方法有哪些,分享常见的网站优化方式

    SEO优化是指根据搜索引擎的法则,来对网站的内容框架等多方面进行调整,关键词精准化引流的一种方法。一个网站想要成功的运营下去,扩大自身的影响力,还是需要不断对网站进行优化。 SEO优化与竞价排名不同,没办法在短时间内吸引眼球,其效果甚至没有竞价排名明显。所以做SEO优化是一个非常漫长的工作,需要有十分的耐心,如果想要立马看到效果的,是非常不适合考虑做SEO优化。就好比如企业的文化,文化的价值并不是…

    2022年5月25日
    640
  • 苹果dfu模式怎么打开,超详细教程奉上

    正常情况下,我们使用爱思助手或iTunes刷机时,无需手动进入恢复模式或DFU模式,在将设备连接到电脑之后,可以直接通过爱思助手“一键刷机”功能进行刷机。 不过在一些特殊情况下(例如设备在启动过程中卡住),我们可能需要将iPhone进入恢复模式或DFU模式之后,才能进行刷机或其它操作。有些用户可能不明白恢复模式与DFU模式有哪些区别,现在就来简单说明下: 恢复模式:又被称作iBoot模式,成功进入…

    2022年10月8日
    560
  • 苹果公司暂停在俄销售产品(并关闭部分功能)

    据美国消费者新闻与商业频道(CNBC)消息,苹果公司3月1日表示,已停止在俄罗斯的产品销售。 据报道,俄罗斯版苹果在线商店的所有产品都显示“无法在该国购买或交付”,而苹果在俄罗斯没有实体店。 苹果还表示,已将俄罗斯官方媒体《今日俄罗斯》和俄罗斯卫星通讯社新闻从俄罗斯境外的苹果应用商店中移除。 据报道,苹果发言人在声明中称,“我们已经采取了一系列措施来应对入侵,我们已经暂停了在俄罗斯的所有产品销售。…

    2022年5月3日
    850
  • 苹果如何截屏截图(iphone截屏方法)

    “买前生产力,买后爱奇艺”,这是购买iPad用户对其的总结。 而其实,iPad是被苹果当成生产力工具来打造的,其中有许多提高效率的操作技巧,就如常用到的截屏,iPad就有高达7种方法! 那么,iPad的7种截图方法是如何操作的呢?今天就来教你! 1、iPad按键截屏 这种截图方法相信是在iPad使用过程中,最常用的截图方法。 和iPhone手机截图方法一致,都是借助外部按键进行截图的,而且iPad…

    2022年5月13日
    880
  • 小红书推广方案有哪些,小红书运营和推广策略

    想必你也听过不少小红书案例,可能自己也在摸索当中。这次我为你带来小红书精准引流三大技巧,帮助你快速掘金。这次的内容很重要,因为: 1、能帮你快速了解小红书规则,避免踩坑和做出效果; 2、帮你解除限流、禁言、封号的难题,避免违规; 3、帮助你精准引流,高效变现。 言归正传,今天的分享,主要是3个方面 ①小红书避坑指南 ②限流、封号、禁言的实用解决方法 ③小红书精准引流三大实用技巧 下载报告请

    2022年7月7日
    460
  • 域名被hold还能恢复吗,其原因及处理方法介绍

    因最近没有提交域名实名材料,导致域名解析不生效,趁着这个机会,详细了解了一下clientHold和serverHold的区别。 首先需要弄明白这几个概念: DomainNameRegistrant: The domainnameregistrantistheorganizationorindividualregistering thedomainname.Whenyousubmityourappl…

    2022年8月26日
    510
  • 海外顶级域名注册的方法,无需备案的域名!

    一、先说大家都感兴趣的: 1.免费的,免费的,免费的 2.顶级域名:就是全球都可以访问的域名 二、部分国内朋友可能访问不了国外网站,请按以下3步操作,便可以与老师一起练手了: 1.以今日头条为例(我在今日头条的名字为【胡发兵】),关注我,如下图 2.移动到栏目【头条号】,找到【胡发兵】,如下图 3.点击【胡发兵】头条号,找到我早前分享的文章:在国内怎么访问google等国外知名网站,按此文章的教程…

    2022年6月2日
    800
  • 如何商标注册申请,商标注册申请入口及注册流程

    很多企业在创立品牌时或有做品牌的打算都会想到注册商标,毕竟商标注册下来才有法律效应,任何人不得侵犯。 注册商标之前,先了解以下几个问题:条件、方法、注意事项。 一、申请条件 注册商标除了要达到法定要求等条件之外,还需要提供一些材料。 申请注册商标分以企业名义和个人名义 企业名义: 1、营业执照副本复印件并加盖公司公章 2、注册图形商标时提供清晰的商标图样 个人名义: 1、申请人身份证复印件 2、个…

    2022年6月7日
    720
  • ktv点歌系统安装(免费家庭k歌软件)

    关于家庭KTV(卡拉OK)系统,很多小伙伴在问,之前老蜗牛分享了《家庭KTV卡拉OK练歌房功能怎么搞(一)》、《家庭卡拉OK(KTV)设备推荐和选购注意事项》,但是更多的小伙伴表示不会用,要求介绍一下系统如何连接和调试,今天就来分享一下。 其实并不难,非新手小白可以只接跳过。 首先我们来认识一下接下来需要用到的线材: 红白双莲花头音频信号线,这种线大家应该都见过,老式电视机、VCD等经常会用到,我…

    2022年5月10日
    2140
  • 中国著名创业家排名,一个创业成功人士的案例分享

    创业有成功也有失败,成功的比如被大家都所熟知的大名鼎鼎的马云,雷军等互联网创业者。但是今天我们文章的主人公并不是他,而是万兴科技董事长吴太兵。 他坚持出海创业15年。 他将消费类软件直接卖给海外海量C端用户,开创了软件跨境电商的新模式,以自建渠道、自主品牌让国产软件畅销全球。2018年1月,他的公司在创业板上市,这是少数派的成功。 吴太兵发表了题为“平凡人的创业”的演讲。他说,高度决定视野,能整合…

    2022年6月18日
    910

发表回复

登录后才能评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信