jsoup爬虫实战详解之新浪

article/2025/9/28 14:02:43

**

jsoup爬虫实战详解之新浪

**
今天分享一个之前困扰了一段时间的关于jsoup爬取新浪网页信息的踩坑总结。
在实现以上功能的之前我门首先要了解两个重点:1.关于jsoup的爬取细节以及教程,爬取时所要了解jsoup的相关标签:具体的自己大家感兴趣的可以自行百度去详细了解下对应的教程。
2.第二点就是我们要了解爬取对面网站的页面构造,现在大体分为HTML形式的展示,还有一种是通过js异步加载所呈现页面效果的形式,js异步加载相对而言比较复杂,今天我们着重讲解下以html形式展示的jsoup实战使用,今天就以新浪为网页为例子进行讲解。

第一步:引入相应的pom文件内容:

在这里插入图片描述

第二步:了解新浪网页的基础的构造

我们进入新浪网页,例如我们点进到体育分类栏,进入体育分类页面右击查看网页源码,我们可以看到
在这里插入图片描述
对应的列表的构造基本是ul>li>a,我们就可以获取到对应标题进入详情的链接
上述我们可以获取对应分类的列表信息,我们随便点一个进入到对应的详情页面继续看下页面的构造情况:
在这里插入图片描述
对应的详情的基本结构就是以class为article为主导的基本数据的构造。今天我门就基本讲解将对应的标题内容信息进行抓取为功能的主导实现
上述就是新浪的对应的页面构造,下面我们直接进入业务代码:

1.通过模拟CHROME览器来获取页面的document信息,代码如下

url为对应的抓取的对应的路径信息,useHtmlUnit为是否使用HtmlUnit此处我们可以传值为false。

    public static Document getHtmlFromUrl(String url, boolean useHtmlUnit) {Document document = null;if (!useHtmlUnit) {try {document = Jsoup.connect(url)// 模拟火狐浏览器.userAgent("Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)").get();} catch (Exception e) {}} else {// 模拟CHROME览器WebClient webClient = new WebClient(BrowserVersion.CHROME);webClient.getOptions().setJavaScriptEnabled(true);// 1 启动JSwebClient.getOptions().setCssEnabled(false);// 2 禁用Css,可避免自动二次请求CSS进行渲染webClient.getOptions().setActiveXNative(false);webClient.getOptions().setRedirectEnabled(true);// 3 启动重定向webClient.setCookieManager(new CookieManager());// 4 启动cookie管理webClient.setAjaxController(new NicelyResynchronizingAjaxController());// 5 启动ajax代理webClient.getOptions().setThrowExceptionOnScriptError(false);// 6 js运行错误时,是否抛出异常webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);webClient.getOptions().setUseInsecureSSL(true);// 忽略ssl认证webClient.getOptions().setTimeout(10000);// 7 设置超时/*** 设置代理 ProxyConfig proxyConfig = webClient.getOptions().getProxyConfig(); proxyConfig.setProxyHost(listserver.get(0));* proxyConfig.setProxyPort(Integer.parseInt(listserver.get(1)));*/HtmlPage htmlPage = null;try {htmlPage = webClient.getPage(url);webClient.waitForBackgroundJavaScript(10000);webClient.setJavaScriptTimeout(10000);String htmlString = htmlPage.asXml();return Jsoup.parse(htmlString);} catch (Exception e) {e.printStackTrace();} finally {webClient.close();}}return document;}

第二步核心代码

	/*** * @param: @param 对应抓取的路径信息:http://sports.sina.com.cn/假定新浪的体育路径* @param: @param 对应标签id 自己的对应的标签id,此处代表新浪* @param: @param 上线数* @param: @param 对应网页的标签规则:此处我们假定为:ul > li > a* @param: @return 数量标签如果为0则爬取结束   * @return: List<Map<String,String>>*/private static List<Map<String,String>> pullNews(String tagUrl,Integer tag,Integer num,String regex) {//获取网页Document html= null;try {html = BaseJsoupUtil.getHtmlFromUrl(tagUrl, false);} catch (Exception e) {}List<Map<String,String>> returnList = new ArrayList<>();//定义返回的list//jsoup获取<a>标签,不同的地址匹配不同的匹配规则Elements newsATags = null;//可以理解为上述的,上述我们关于体育的第一个页面的规则基本为:ul > li > aif(Utils.notBlank(regex)) {newsATags = html.select(regex);}else {System.out.println(tagUrl+"采集规则未设置");return returnList;}//当规则不适用时if(newsATags.isEmpty()) {System.out.println(tagUrl+"规则不适用");return returnList;}//从<a>标签中抽取urlList<Map<String,String>> list = new ArrayList<>();//定义存储url的list//遍历我们体育专题的列表信息来获取通过对应的url获取对应的详情信息for (Element a : newsATags) {String articleTitle=a.text();//获取当前标题信息String url = a.attr("href");//获取对应的标题的路径,也就是我上述所说的跳转对应详情的路径,我们通过进入详情来抓取我们想要的文章标题,图片等信息if(url.contains("html")) {if(url.indexOf("http") == -1) {url = "http:" + url;}Map<String,String> map = new HashMap<>();map.put("url", url);map.put("title", articleTitle);list.add(map);}else {continue;  }      }//根据url访问页面获取内容for(Map<String,String> m :list) {Document newsHtml = null;try {//通过模拟器获取对应路径下的html信息,此处的url就是对应的详情的链接,通过模拟器获取对应的页面信息内容newsHtml = BaseJsoupUtil.getHtmlFromUrl(m.get("url"), false);String title=m.get("title");//获取标题Elements newsContent=null;String data;newsContent=newsHtml.select(".article");//这里就是我上述讲解信息的第二个说的jsoup通过标签来进行信息抓取,上述的为class为article的抓取规则if(newsContent!=null) {      String content=newsContent.toString();//获取对应的内容信息//篇幅太短的文章不需要if(content.length() < 200) {//过滤过长的文章break;}//时间过滤if(Utils.isBlank(newsHtml.select(".date").text())) {data=newsHtml.select(".time").text().replaceAll("年", "-").replaceAll("月", "-").replaceAll("日", "");}else{data=newsHtml.select(".date").text().replaceAll("年", "-").replaceAll("月", "-").replaceAll("日", "");}//指定路径时间过滤if(tagUrl.equals("http://collection.sina.com.cn/")) {data=newsHtml.select(".titer").text().replaceAll("年", "-").replaceAll("月", "-").replaceAll("日", "");}else if(tagUrl.equals("https://finance.sina.com.cn/stock/") || tagUrl.equals("http://blog.sina.com.cn/lm/history/")) {data=newsHtml.select(".time SG_txtc").text().replaceAll("年", "-").replaceAll("月", "-").replaceAll("日", "").replaceAll("(", "").replaceAll(")", "");}//获取到图片信息List<String> imgSrcList = BaseJsoupUtil.getImgSrcList(content);String coverImg = "";if(!imgSrcList.isEmpty()) {if(num == 0) {break;//已达设定的采集数量上限}num --;for(String url : imgSrcList){String imgUrl = BaseJsoupUtil.downloadUrl(url.indexOf("http") == -1?"http:" + url:url);content = Utils.isBlankStr(content)?content:content.replace(url, imgUrl);if(Utils.isBlank(coverImg))coverImg = imgUrl.replace(FileConst.QINIU_FILE_HOST+"/", "");}//获取到我们想要的东西封装到map里面,这样就基本结束拉Map<String,String> map = new HashMap<>();map.put("title", title);//标题map.put("date", data);//文章创建时间map.put("content", HtmlCompressor.compress(content));//文章内容map.put("tag", tag.toString());//标签idmap.put("coverImg", coverImg);//文章封面图map.put("url", m.get("url"));//urlreturnList.add(map);}}} catch (Exception e) {e.printStackTrace();}}return returnList;}

上述就是jsoup抓取的基本逻辑,整体的总结就是熟悉对应jsoup的标签使用教程,想要抓取页面的具体规则,知道了这些基本就可以结合自己的业务逻辑来进行信息获取,这里关于新浪的抓取我们只做技术交流,希望大家不要用于商业使用。好了,今天就到这里了,后期继续分享自己的踩坑记录,有什么问题的可以留言。


http://chatgpt.dhexx.cn/article/3uAffV1b.shtml

相关文章

Java JSOUP爬虫学习分享

昨天从狂神大佬那学习了如何用jsoup爬去网站数据&#xff0c;现在整理了一下给大家分享一下。 先创建一个名叫JsoupPojo的实体类用来装入数据。 Data public class JsoupPojo {private String src;private String name; } 下面是将用来爬取的方法封装成了一个工具类 Compon…

java jsoup爬虫

前言&#xff1a;在日常开发中&#xff0c;我们必定是与我们的数据源打交道&#xff0c;我们的数据源无非就那么几个 1.数据库2.爬虫数据 3.第三方系统交互&#xff0c;这里介绍java 中网页版的爬虫jsoup的使用 1.首先导入我们的jar包 maven坐标如下 org.jsoup jsoup 1.13.1 c…

Jsoup爬虫并解析网页

Jsoup爬虫并解析网页 京东搜索 java&#xff0c;爬取有关java的商品信息 1、获取请求 String url"https://search.jd.com/Search?keywordjava";2、解析网页。&#xff08;Jsoup返回的Document对象就是浏览器的Document对象&#xff09; 所有js中操作Document对象的…

Jsoup爬虫入门实战

一、Jsoup介绍 jsoup 是一款基于 Java 的HTML解析器&#xff0c;它提供了一套非常省力的API&#xff0c;不但能直接解析某个URL地址、HTML文本内容&#xff0c;而且还能通过类似于DOM、CSS或者jQuery的方法来操作数据&#xff0c;所以 jsoup 也可以被当做爬虫工具使用。 相关…

Jsoup爬虫实例

一、简介 jsoup 是一款Java 的HTML解析器&#xff0c;可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API&#xff0c;可通过DOM&#xff0c;CSS以及类似于jQuery的操作方法来取出和操作数据。&#xff08;来源百度&#xff09; 二、准备 首先你需要找到一个你…

使用Jsoup实现网络爬虫

一、什么是Jsoup&#xff1f; jsoup是一款Java的HTML解析器、可以通过URL获取DOM元素并解析&#xff0c;也可对HTML文本内容进行解析&#xff0c;jsoup提供了一套非常简单的方法&#xff0c;类似于CSS、JQuery的操作方法对元素或者是数据进行操作。 二、Jsoup的特点及作用 从…

Java学习笔记:爬虫-用Jsoup解析网页

什么是爬虫 1、爬虫&#xff1a;程序代替人的人工操作&#xff0c;自动获取网页内容&#xff0c;并且从其中提取出来有价值信息。 2、原始&#xff1a;调用Http的类向服务器发出请求&#xff0c;获得HTML&#xff0c;然后用正则表达式等去分析。缺点&#xff1a;难度高。 3、…

jsoup爬虫

文章目录 1、jsoup爬虫简单介绍2、相关代码2.1导入pom依赖2.2、图片爬取2.3、图片本地化 3、百度云链接爬虫 1、jsoup爬虫简单介绍 jsoup 是一款 Java 的HTML 解析器&#xff0c;可通过DOM&#xff0c;CSS选择器以及类似于JQuery的操作方法来提取和操作Html文档数据。 这两个…

解析卷积神经网络学习笔记——魏秀参

第二章 CNN基本部件 1.理解批处理和随机梯度下降&#xff1a; 训练模型时随机选取n个训练样本作为一个batch&#xff08;批输入&#xff09;&#xff0c;那么经过设计好的卷积神经网络就可以输出n个预测值&#xff0c;对这n个预测值求其损失函数&#xff08;注意损失函数绝不是…

【干货】卷积神经网络Alex-Net、VGG-Nets、Network-In-Network案例分析

目录 Alex-Net 网络模型 VGG-Nets 网络模型 Network-In-Network 本文将以 Alex-Net、VGG-Nets、Network-In-Network 为例&#xff0c;分析几类经典的卷积神经网络案例。 在此请读者注意&#xff0c;此处的分析比较并不是不同网络模型精度的“较量”&#xff0c;而是希望读者…

2018年国内十大技术突破:22纳米光刻机、大型航天器回收

https://www.toutiao.com/a6639830026990649860/ 2018-12-28 08:11:39 盘点这一年的核心技术&#xff1a;22纳米光刻机、450公斤人造蓝宝石、0.12毫米玻璃、大型航天器回收、盾构机“弃壳返回”、远距离虹膜识别……哪一个不夺人眼球&#xff01; 1 智能水刀削铁断金 10月份的…

AI的螺旋式上升?今日头条AI掌门人马维英离职,“重返”清华从事培育科研工作

2020-07-29 01:22:49 作者 | 蒋宝尚 编辑 | 丛 末 据媒体报道&#xff0c;字节跳动副总裁、人工智能实验室主任马维英离职&#xff0c;将到清华大学智能产业研究院任职&#xff0c;加入正在筹备该产业院的原百度总裁张亚勤团队。 对于马维英离职一事&#xff0c;字节跳动也做…

超全深度学习细粒度图像分析:项目、综述、教程一网打尽

在本文中&#xff0c;来自旷视科技、南京大学和早稻田大学的研究者对基于深度学习的细粒度图像分析进行了综述&#xff0c;从细粒度图像识别、检索和生成三个方向展开论述。此外&#xff0c;他们还对该领域未来的发展方向进行了讨论。 &#xff08;CV&#xff09;是用机器来理解…

机器学习防止模型过拟合的方法知识汇总

目录 LP范数L1范数L2范数L1范数和L2范数的区别DropoutBatch Normalization归一化、标准化 & 正则化Reference 其实正则化的本质很简单&#xff0c;就是对某一问题加以先验的限制或约束以达到某种特定目的的一种手段或操作。在算法中使用正则化的目的是防止模型出现过拟合。…

一文读懂机器学习中的正则化

正则化是一种为了减小测试误差的行为(有时候会增加训练误差)。当我们用较为复杂的模型拟合数据时,容易出现过拟合现象,导致模型的泛化能力下降,这时我们就需要使用正则化,降低模型的复杂度。本文总结阐释了正则化的相关知识点,帮助大家更好的理解正则化这一概念。 目录 L…

漆远离职阿里加盟复旦!大牛纷纷回归学界,大厂AI名存实亡?

来源丨新智元 编辑丨小咸鱼 好困 【导读】蚂蚁金服原副总裁、AI团队负责人漆远已于近日离职&#xff0c;出任复旦大学「浩清」教授&#xff0c;复旦人工智能创新与产业研究院院长。将从事深度学习、强化学习等人工智能领域的前沿研究和应用。 那个支付宝背后的AI大牛&#xff0…

正则化方法归纳总结

作者丨Poll 来源丨https://www.cnblogs.com/maybe2030/p/9231231.html 编辑丨极市平台 本文仅用于学术分享,如有侵权请联系后台删文 导读 本文先对正则化的相关概念进行解释作为基础&#xff0c;后对正则化的方法进行了总结&#xff0c;帮助大家更加清晰的了解正则化方法。 阅…

阿里副总裁、达摩院自动驾驶负责人王刚离职!

转载自&#xff1a;新智元 | 编辑&#xff1a;桃子 好困 【导读】从学界「跨界」互联网&#xff0c;再转身去创业。这一年&#xff0c;他40岁&#xff0c;依然选择挑战自我。消息称&#xff0c;阿里副总裁、达摩院自动驾驶实验室负责人王刚已于近日离职。阿里&#xff0c;是他的…

机器学习防止模型过拟合方法总结

转自 | 小白学视觉&#xff0c;作者小白 文章仅用于学术分享&#xff0c;侵删 目录 LP范数L1范数L2范数L1范数和L2范数的区别DropoutBatch Normalization归一化、标准化 & 正则化Reference 其实正则化的本质很简单&#xff0c;就是对某一问题加以先验的限制或约束以达到某种…

CV还要更热闹!旷视刚宣布4.6亿美元融资,商汤:新一轮年内完成

允中 发自 凹非寺 量子位 报道 | 公众号 QbitAI △ 商汤科技CEO徐立 你追我赶&#xff01; 机器视觉&#xff08;CV&#xff09;领域热度还在急剧升温。 昨天&#xff0c;旷视科技(Face)刚完成了C轮4.6亿美元融资&#xff0c;刷新了AI公司全球单轮融资额纪录。 而这一纪录的保…