Java零基础入门——使用jsoup进行初级网络爬虫

2024-04-01 07:38

本文主要是介绍Java零基础入门——使用jsoup进行初级网络爬虫,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 0. 配置jsoup
      • 1. 实战爬虫知乎
      • 2. 实战汽车之家爬图

0. 配置jsoup

  • 安装idea并打开创建class
  1. 打开idea,File->New->Project->Maven->Next----->Finish
  2. 在文件夹src->main->java下先创建package,再在该package下创建java class。
  • 配置jsoup
    把以下的文档复制粘贴到pom.xml:
<dependencies><dependency><!-- jsoup HTML parser library @ http://jsoup.org/ --><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.10.2</version></dependency></dependencies>

1. 实战爬虫知乎

先使用jsoup获取网页的源代码,具体的,可以用Chrome浏览器打开该网页,右击查看源代码。

Document document=Jsoup.connect("https://www.zhihu.com/explore/recommendations")
.userAgent("Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)")
.get();

注:userAgent需要在网页中找对应的,具体的地方在:
在这里插入图片描述
然后是找到url,具体也是通过网页的源代码中去找(其实,爬虫爬虫,爬的就是网页,所以所有的去网页的源代码中去找就对了),先贴源码:

Element main = document.getElementById("zh-recommend-list-full");
Elements url = main.select("div").select("h2").select("a[class=question_link]");

注: 其中,document.getElementById表示通过id定位到你要爬取的块,然后用.select定位到前缀包含这些限定词的所有url

对应网页的源代码部分:
在这里插入图片描述
在这里插入图片描述
然后去遍历获取到的所有url

for(Element question:url)

并解析出单个问题的URL并连接,方式如上所述:

String URL=question.attr("abs:href");
Document document2=Jsoup.connect(URL).userAgent("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36").get();

然后同样的方式获取问题、问题描述、回答:

//问题
Elements title=document2.select(".QuestionHeader-main").select(".QuestionHeader-title");
//问题描述
Elements detail=document2.select(".QuestionHeader-detail").select(".QuestionRichText").select("span[class=RichText ztext]span[itemprop=text]");
//回答
Elements answer=document2.select(".RichContent").select(".RichContent-inner").select("span[class=RichText ztext CopyrightRichText-richText]span[itemprop=text]");

在这里插入图片描述
最后打印出来就好了,以下是完整代码:

package spider;import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;public class spider {public static void main(String[] args) throws IOException {//获取编辑推荐页Document document=Jsoup.connect("https://www.zhihu.com/explore/recommendations")//模拟火狐浏览器.userAgent("Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)").get();Element main=document.getElementById("zh-recommend-list-full");//System.out.println(main);Elements url=main.select("div").select("h2").select("a[class=question_link]");for(Element question:url){//输出href后的值,即主页上每个关注问题的链接String URL=question.attr("abs:href");//下载问题链接指向的页面Document document2=Jsoup.connect(URL).userAgent("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36").get();//问题
//            Elements title=document2.select("#zh-question-title").select("h2").select("a");Elements title=document2.select(".QuestionHeader-main").select(".QuestionHeader-title");//问题描述Elements detail=document2.select(".QuestionHeader-detail").select(".QuestionRichText").select("span[class=RichText ztext]span[itemprop=text]");//回答Elements answer=document2.select(".RichContent").select(".RichContent-inner").select("span[class=RichText ztext CopyrightRichText-richText]span[itemprop=text]");if(detail.size() == 0){System.out.println("\n"+"链接:"+URL+"\n"+"标题:"+title.text()+"\n"+"问题描述:"+"无"+"\n"+"回答:"+answer.text());}else{System.out.println("\n"+"链接:"+URL+"\n"+"标题:"+title.text()+"\n"+"问题描述:"+detail.text()+"\n"+"回答:"+answer.text());}}}
}

结果截图:
在这里插入图片描述
参考:https://blog.csdn.net/u014798883/article/details/54909951(原代码跑不通,本博文有改)

2. 实战汽车之家爬图

还是同样的思路,只不过这里是获取图片的URL,然后下载图片就好了,这里下载图片的代码是copy别人的,原代码忘了网址,发现的朋友请告知一声,我贴上链接或者删掉,谢谢理解-。

这里就直接贴源码了:

package spider;import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;import java.io.IOException;import java.io.File;
import java.io.IOException;import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;public class spider_picture {private static void downImages(String filePath, String imgUrl) {// 若指定文件夹没有,则先创建File dir = new File(filePath);if (!dir.exists()) {dir.mkdirs();}// 截取图片文件名String fileName = imgUrl.substring(imgUrl.lastIndexOf('/') + 1, imgUrl.length());try {// 文件名里面可能有中文或者空格,所以这里要进行处理。但空格又会被URLEncoder转义为加号String urlTail = URLEncoder.encode(fileName, "UTF-8");// 因此要将加号转化为UTF-8格式的%20imgUrl = imgUrl.substring(0, imgUrl.lastIndexOf('/') + 1)+ urlTail.replaceAll("\\+", "\\%20");} catch (UnsupportedEncodingException e) {e.printStackTrace();}// 写出的路径File file = new File(filePath + File.separator + fileName);try {// 获取图片URLURL url = new URL(imgUrl);// 获得连接URLConnection connection = url.openConnection();// 设置10秒的相应时间connection.setConnectTimeout(10 * 1000);// 获得输入流InputStream in = connection.getInputStream();// 获得输出流BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));// 构建缓冲区byte[] buf = new byte[1024];int size;// 写入到文件while (-1 != (size = in.read(buf))) {out.write(buf, 0, size);}out.close();in.close();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) throws IOException {//获取图片爬虫页Document document = Jsoup.connect("https://car.autohome.com.cn/photolist/series/34231/4457966.html#pvareaid=3454450").userAgent("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36").get();String id = "pa";int n = 1;while (n < 4) {Element main=document.getElementById("pa" + n);Elements url = main.select("li").select("img");for(Element picture:url) {//输出href后的值,即主页上每个关注问题的链接String URL=picture.attr("abs:src");System.out.println(URL);downImages("d:/this_is_save_pictures_folder", URL);}n += 1;}}
}

这篇关于Java零基础入门——使用jsoup进行初级网络爬虫的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/866590

相关文章

Java如何根据word模板导出数据

《Java如何根据word模板导出数据》这篇文章主要为大家详细介绍了Java如何实现根据word模板导出数据,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... pom.XML文件导入依赖 <dependency> <groupId>cn.afterturn</groupId>

Java应用如何防止恶意文件上传

《Java应用如何防止恶意文件上传》恶意文件上传可能导致服务器被入侵,数据泄露甚至服务瘫痪,因此我们必须采取全面且有效的防范措施来保护Java应用的安全,下面我们就来看看具体的实现方法吧... 目录恶意文件上传的潜在风险常见的恶意文件上传手段防范恶意文件上传的关键策略严格验证文件类型检查文件内容控制文件存储

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态:

浅析Java如何保护敏感数据

《浅析Java如何保护敏感数据》在当今数字化时代,数据安全成为了软件开发中至关重要的课题,本文将深入探讨Java安全领域,聚焦于敏感数据保护的策略与实践,感兴趣的小伙伴可以了解下... 目录一、Java 安全的重要性二、敏感数据加密技术(一)对称加密(二)非对称加密三、敏感数据的访问控制(一)基于角色的访问

Java计算经纬度距离的示例代码

《Java计算经纬度距离的示例代码》在Java中计算两个经纬度之间的距离,可以使用多种方法(代码示例均返回米为单位),文中整理了常用的5种方法,感兴趣的小伙伴可以了解一下... 目录1. Haversine公式(中等精度,推荐通用场景)2. 球面余弦定理(简单但精度较低)3. Vincenty公式(高精度,

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

使用Java将实体类转换为JSON并输出到控制台的完整过程

《使用Java将实体类转换为JSON并输出到控制台的完整过程》在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用JSON格式,用Java将实体类转换为J... 在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用j

Java实现视频格式转换的完整指南

《Java实现视频格式转换的完整指南》在Java中实现视频格式的转换,通常需要借助第三方工具或库,因为视频的编解码操作复杂且性能需求较高,以下是实现视频格式转换的常用方法和步骤,需要的朋友可以参考下... 目录核心思路方法一:通过调用 FFmpeg 命令步骤示例代码说明优点方法二:使用 Jaffree(FF

Java实现图片淡入淡出效果

《Java实现图片淡入淡出效果》在现代图形用户界面和游戏开发中,**图片淡入淡出(FadeIn/Out)**是一种常见且实用的视觉过渡效果,它可以用于启动画面、场景切换、轮播图、提示框弹出等场景,通过... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细

Java如何用乘号来重复字符串的功能

《Java如何用乘号来重复字符串的功能》:本文主要介绍Java使用乘号来重复字符串的功能,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java乘号来重复字符串的功能1、利用循环2、使用StringBuilder3、采用 Java 11 引入的String.rep