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

目标爬全景图,下载到本地。收获通过本文,您将了解到:IDEA创建工程IDEA导入jar包爬虫的基本原理Jsoup的基本使用File的基本使用FileOutputStream的基本使用ArrayList的基本使用foreach的基本使用解释爬虫使用的HTM解析器是Jsoup。Jsoup可以直接解析URL地址和HTML文本内容。它...

目标

爬全景图,下载到本地。

收获

通过本文,您将了解到:

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

解释

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

关于JSOUP相关API的整理,见文末附录1。

开始

一、前端分析

1.使用Chrome或其他浏览器,打开全景网,按F12进入调试模式,分析网页结构。(这里的选择是“创意”= >;《约塞米蒂》)

2.寻找规律,看看图片对应的结构是什么。你可以看到下面的红框显示了每张图片的结构。

3.先找到结构再找图片链接。经过进一步分析,发现图片链接可以是下图的红框部分。

4.将其***到浏览器中,打开并检查它。(嗯,访问这个网址直接给我下载…)

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

二。爬行想法

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

三。Java编码

1.首先下载Jsoup jar包,将其导入到IDEA项目中。

2、新建Java工程。2.创建新的Java项目。

3、简单测试下get请求,若请求成功,则进入下一步;若报错,检查URL是否带了中文。3.只需测试get请求,如果请求成功,就进入下一步;如果报告了错误,请检查URL是否有中文字符。

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

package com.sxf;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;public class Main { public static void ***in(String[] args) { try { Document doc = Jsoup.connect("").get(); //这里加链接 System.out.println(doc); }catch (Exception e){ e.printStackTrace(); } }}

4.找到类为item lazy的元素,找到它的子节点,返回ArrayList。并单独提取图片的网址。

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

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

5.我们先试着用Jsoup下载一张图试试效果。

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

// 获取responseConnection.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图片正常生成并显示!

6.接下来,我们将创建一个文件夹来存储图片。

文件相关API的整理见文末附录2。

//当前路径下创建Pics文件夹File file = new File("Pics");file.mkdir();System.out.println(file.getAbsolutePath());

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 ++;}

运行结果

这个编码部分也结束了。完整代码见文末附录3!

附录一

Jsoup(HTML解析器)

继承关系:Document继承Element继承Node。TextNode继承Node。->java.lang.Object ->org.jsoup.nodes.Node ->org.jsoup.nodes.Element ->org.jsoup.nodes.Documenthtml文档: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等于***sthead的div标签 Element ***sthead = doc.select("div.***sthead").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)

附录二

文件类

*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 ***in(String[] args) { try { Document doc = Jsoup.connect("https://***.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(); } }}

本文来自牙可爱的骚云吖~投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/495608.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 04-08
下一篇 04-08

相关推荐

  • 爬虫软件哪个好用 获取客户数据的软件推荐

    目前市场上常用的爬虫工具可以分为云网络爬虫和数据采集器两大类(除了自己开发设计的爬虫工具和爬虫框架)。云爬虫就是不需要下载安装程序。您可以在网页上构建网络爬虫,并在web服务器上运行它。网站提供网络带宽和24小时服务。数据采集器一般是指安装下载,然后构建一个网络

    2023-07-29 11:25:01
    271 0
  • 爬虫下载图片打不开是什么原因(爬虫下载图片代码)

    爬虫,全称网络爬虫,是通过技术手段从网络获取数据的程序或脚本。人生苦短,我选python。这一次,python将用于下载一个壁纸网站的图像。本文是直接爬虫的实战。通过本文,我们将带您了解requests库的基本用法,完成壁纸网站的图片抓取。请求库是python中非常有用的http请求库

    2023-07-15 16:05:01
    349 0
  • 磁力搜索是爬虫吗

    品牌型号:联想小新Pro13/系统版本:windows10 磁力搜索不是爬虫磁力搜索是专门用来搜索磁力链接的,也就是我们常说的BT种子磁力搜索。它是基于 P2P 技术的 ED2K 资源搜索工具。磁力链接是一种特殊链接,与传统链接不同,它只是通过不同文件内容的Hash结果生成一个纯文本的&l

    2023-07-12 18:11:01
    1034 0
  • python爬虫例子教程 适合新手的python爬虫数据分析案例

    他们都是程序员。为什么别人的程序员效率那么高?因为他用的是Python。今天推荐的项目,可以让你放开双手。它是:网络爬虫的例子本项目包含了一些常见的网站爬虫的例子,代码通用性高,时效性长。项目的代码对新手是友好的。尝试使用带有大量注释的简单Python代码。目前,该项

    2023-07-11 21:38:01
    979 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

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

关注微信