Java实现爬取网页数据

【教你写爬虫】用Java爬虫爬取百度搜索结果!可爬10w+条! 在爬虫中,无非就是模拟人的操作过程,去做相关操作,获取数据。通过上文介绍的方式,我们是使用一种更具有通用型的方式去爬取数据。因为Puppeteer只是代理人手工点击的方式,而拿到数据。上述完整代码,可以留言私信我获取。 阅读详情

Java 目录:https://blog.youkuaiyun.com/dkbnull/article/details/87932486


最近在学习数据可视化,想分析下近年来各城市温度、空气质量等变化情况,需要一些数据,因此从网上爬取一些有用数据进行分析。
思路:先爬取网页源码,然后从源码中使用正则表达式获取所需要的数据。


以下可实现获取网页源码,并在控制台上输出。

		String urlStr = ""; // 网址
		try {
			//创建一个url对象来指向要采集信息的网址
			URL url = new URL(urlStr);
			//将读取到的字节转化为字符
			InputStreamReader inStrRead = new InputStreamReader(url.openStream(),"utf-8");
			//读取InputStreamReader转化成的字符
			BufferedReader bufRead = new BufferedReader(inStrRead);	
			//读到的内容不为空
			while (bufRead.readLine() != null) {
				System.out.println(bufRead.readLine());
			}
			bufRead.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

测试一下,这里使

String urlStr = "http://datacenter.mep.gov.cn/report/air_daily/air_dairy.jsp?&lang=";

在控制台输出如下结果。
源码

得到网页源码之后,我们就可以使用正则表达式来获取需要的数据。

我们先对源码进行分析。
源码
这里写图片描述
这里想要采集的数据是

  • 城市
  • 时间
  • AQI指数
  • 空气质量级别

以北京市为例进行分析,我们得到如下正则表达式

	// 城市正则
	private String regularCity = ">[\u4e00-\u9fa5]{2,}市</td>"; 
	// 日期正则
	private String regularDate = ">(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))</td>";
	// AQI指数正则
	private String regularAQI = ">[0-9]{2,}</td>"; 
	// 空气质量级别正则
	private String regularQuality = ">[\u4e00-\u9fa5]</td>"; 

我们先定义一个方法,使用我们定义的正则表达式和得到的网页源码来过滤数据。

	/*
	 * 从网页源代码中过滤数据
	 * @param regular 正则
	 * 
	 * @param code 源代码
	 */
	public String DataAcqu(String regular, String code) {
		 // 编译正则表达式
		Pattern p = Pattern.compile(regular, Pattern.CASE_INSENSITIVE);
		Matcher m = p.matcher(code);
		
		if (m.find()) {
			// 返回采集到的数据
			return m.group();
		} else {
			return "";
		}
	}

然后就可以获取我们所需的数据了

	public DataCode() {
		// 用户输入网页地址
		Scanner scan = new Scanner(System.in); 
		// 存储用户输入的网页地址
		String urlStr = scan.nextLine(); 

		try {
			//创建一个url对象来指向要采集信息的网址
			URL url = new URL(urlStr); 
			//将读取到的字节转化为字符
			InputStreamReader inStrRead = new InputStreamReader(url.openStream(),
					"utf-8"); 
			//读取InputStreamReader转化成的字符
			BufferedReader bufRead = new BufferedReader(inStrRead);
			String readStr = "";
			// 创建一个DataAcqu类的对象(前面自己定义的用于采集数据的类)
			DataAcqu dataAcq = new DataAcqu();

			int i = 0; // 记录采集到的数据数量
			// 如果读到的数据不为空
			while ((readStr = bufRead .readLine()) != null) {
				// 采集城市数据
				String cityStr = dataAcq.DataAcqu(regularCity, readStr);
				// 如果采集到符合条件的数据,打印出来
				if (!cityStr.equals("")) {
				 // 将采集到的数据前后多余部分去掉(前面正则表达式为了准确取到相应的值,加入了">"和"</td>")
					cityStr = cityStr.substring(1, cityStr.indexOf("</td>"));
					System.out.println("城市:" + cityStr);
				}

				// 采集日期数据
				String dateStr = dataAcq.DataAcqu(regularDate, readStr);
				// 如果采集到符合条件的数据,打印出来
				if (!dateStr.equals("")) {
					dateStr = dateStr.substring(1, dateStr.indexOf("</td>"));
					System.out.println("日期:" + dateStr);
				}

				// 采集AQI指数数据
				String AQIStr = dataAcq.DataAcqu(regularAQI, readStr);
				// 如果采集到符合条件的数据,打印出来
				if (!AQIStr.equals("")) {
					AQIStr = AQIStr.substring(1, AQIStr.indexOf("</td>"));
					System.out.println("AQI指数:" + AQIStr);
				}

				// 采集空气质量级别数据
				String qualityStr = dataAcq.DataAcqu(regularQuality, readStr);
				// 如果采集到符合条件的数据,打印出来
				if (!qualityStr.equals("")) {
					qualityStr = qualityStr.substring(1,
							qualityStr.indexOf("</td>"));
					System.out.println("空气质量级别:" + qualityStr);
					System.out.println();
					i++;
				}
			}
			br.close(); // 读取完成后关闭读取器
			System.out.println("采集完成,共采集到数据:" + i);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

运行后,控制台输出如下信息
结果
如果想要将输出结果输出的文件中,只需在代码中添加类似如下代码

// 将数据输出到文件
PrintStream ps = new PrintStream("E:\\Java\\DataAcquisition\\data");
//将输出位置切换到文件
System.setOut(ps);

结果

这样,我们就爬取到我们所需要的数据了。

java爬虫实战——实现简单的爬取网页数据 故事的开头 虽然我们程序员不干爬虫的活,但是工作中确实偶尔有需要网络上的数据的时候,手动复制粘贴的话数据量少还好说,万一数据量大,浪费时间不说,真的很枯燥。 所以现学现卖研究了一个多小时写出了个爬虫程序 一、爬虫所需要的工具包 新建个Maven项目,导入爬虫工具包Jsoup <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</art 阅读详情

相关推荐

Java代码实现网页数据爬取-HttpClient

一、环境准备 软件准备: Idea , maven 二、创建SpringBoot项目 (创建过程略) 三、 编写pom文件,导入相关依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.9&lt

Huang1178387848的博客 582

java爬虫爬取cnvd,CNVD.py

'''该模块主要处理http://www.cnvd.org.cn功能包括:1.漏洞列表爬虫2.解析统计查询中的共享数据xml'''import osfrom queue import Queuefrom datetime import datetimeimport threadingimport requestsfrom bs4 import BeautifulSoupimport pandas ...

weixin_35390379的博客 800

JAVA爬虫(一):豆瓣电影排行榜爬取

最近和[大创队友](https://me.youkuaiyun.com/code6_6)给大创做的APP增添了新功能,新功能中需要用到爬取豆瓣、QQ音乐、哔哩哔哩等网站。所以写下博客记录这一过程,也算是和大家分享一些经验。

patricia的博客 5887

Java 爬取页面数据操作

Java 爬取页面数据操作

瓜瓜嘟嘟 576

Java版爬虫,爬网页,爬小说,完整教程,一看就会

昨天小编看到了一部不错的小说,但是没有办法下载,只能一页一页地看,于是想到了爬虫,现在Java也有了爬虫的框架,很简单,就算小白也能轻易入门,话不多说,直接上手。 1.首先引入相关依赖 不会maven的话可以按照右边直接去maven库下载添加jar包,注意不要少包,否则会报找不到类 依赖示例代码: <dependencies> <dependency> <groupId>us.codecraft</g..

TNDHY_ANNI_MXZL的博客 4960

从‘静态拍照’到‘动态录像’:用Malmquist指数讲好你的效率变化故事(附Stata/R代码)

本文深入探讨了如何利用Malmquist指数构建动态效率分析框架,从静态数据到动态叙事的转变。通过分解技术效率变化(EC)和技术进步(TC),结合Stata/R代码实现四种动态可视化方法,帮助研究者更直观地展示效率变化的动态特征。文章还提供了诊断性叙事结构和比较叙事技巧,助力决策者理解效率提升的来源与趋势。

weixin_32678995的博客 603

用java实现一个简单的网络爬虫

Internet上的每一个网页都具有一个唯一的名称标识,通常称之为URL(Uniform Resource Locator, 统一资源定位器)。它是www的统一资源定位标志,简单地说URL就是web地址,俗称“网址”。URL是对互联网上得到的资源的位置和访问方法的一种简洁表示,是互联网上标准资源的地址。URL它具有全球唯一性,正确的URL应该是可以通过浏览器打开此网页的,但如果您访问外网,会提示网页无法打开,这并不能说明这个URL是错误的。只不过在国内不能访问而已。

m0_74120645的博客 2962

Paypal开发者中心获取“ClientId”和“ClientSecret”参数

正式环境设置 1、登录到 paypal开发者中心 网址:https://developer.paypal.com/developer/ 点击右上角登录按钮登录 2、左侧栏 - 我的应用程序和凭证 - 点击“创建新应用” 新注册的paypal账号,需要进行邮箱验证,验证通过后,需要等待一段时间(或重新登录),才会出现相关设置项位置 验证邮箱通过后,点击创建新应用 3、按提示填写,保存创建应用 4、点击刚创建的应用进入应用详情页 5、应用详情页获得网站开发人员所需要的“ClientId”和“Client

龚清林的博客 1万+

java 爬取网页数据 多页爬取 jsoup 和 httpClient 实现

预览结果视图 目录 预览结果视图 介绍 代码 依赖 爬取网页数据代码 解析代码 解析介绍 完整代码 介绍 1.爬取通过org.jsoup和HttpClients实现 2.爬取多页内容的时候进行循环,多页进行爬取 3.爬取来数据解析到jsonoup 4.取回数据使用文件保存直接保存到本地 5.文件保存成excel可以产考我的另一篇文章https://yushen.blog.youkuaiyun.com/article/details/111580547 6.最后直接用...

银河系天城知识宝库_技术专家蒋浩宇 1949

OCR模型轻量化新思路:用ONNX Runtime加速PP-OCRv4推理(附性能对比测试)

本文详细介绍了如何利用ONNX Runtime对PP-OCRv4模型进行轻量化部署与推理加速。通过模型导出优化、动态量化、线程绑定及内存复用等技巧,在树莓派、RK3588等边缘设备上实现了超过50%的性能提升,并显著降低了内存占用,为移动端OCR部署提供了完整的优化方案和实测数据对比。

weixin_29063979的博客 496

Windows服务器XMRig挖矿病毒深度清除实战指南

XMRig是一种广泛用于Monero(XMR)加密货币挖矿的开源工具,其在Windows环境中的持久化机制已远超传统木马范畴,融合WMI事件订阅、服务伪装、PowerShell无文件执行与注册表隐写等多重反检测技术。理解其基于行为而非特征的生存逻辑,是实现有效检测与根除的前提。该技术具备强隐蔽性、高自愈性与网络通信合法化特征,常见于RDP弱口令爆破、SMB共享泄露及PowerShell远程执行等非漏洞类入侵场景。本文聚焦Windows原生命令与Sysinternals工具链,提供覆盖进程定位、WMI清理、服

weixin_30535843的博客 734

java怎样模拟点击网页,笔者操作Java+selenium实现网站模拟点击和页面数据爬取

电脑现已成为我们工作、生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到Java+selenium实现网站模拟点击和页面数据爬取的问题,如果我们遇到了Java+selenium实现网站模拟点击和页面数据爬取的情况,该怎么处理怎么才能解决Java+selenium实现网站模拟点击和页面数据爬取带来的困扰呢,对于这样的问题其实我们只需要EclipseMavenChrome浏览器chromedr...

weixin_39675289的博客 2460

2026 最新实战教程:AI 重构开发全流程(从需求→上线→运维)

1)做什么系统2)技术栈3)功能模块4)部署要求plaintext我要做一个:待办事项(Todo)全栈应用技术栈:前端:React + TypeScript + Tailwind后端:Node.js + Express + MongoDB部署:Docker + 本地运行(后续可上云)功能:- 增删改查任务- 任务状态切换(完成/未完成)- 简单错误处理请按企业级标准生成:架构设计 + 全部代码 + 接口文档 + 启动命令。

qq_35779316的博客 1701

Java实现爬取网页数据:PhantomJS+Webdriver

本文根据工作中爬取数据需要所做工作整理而来。最初我使用了HttpClient+Jsoup,然后这种最简单的方式只能得到普通的静态页面数据以及暴露在浏览器F12调试窗口中的可见URL的数据采集,对于一些需要模仿浏览器行为,比如页面采用了JS框架进行重新布局的就无能为力了。因此,对于此类情况,最后经过摸索,得到了这个比较好一点的实践方式。下面废话不多说,来一个具体实践:

GUO_YANG_FAN的博客 2243

手把手教你用Kokoro-82M-v1.1-zh搭建本地TTS服务(含WebSocket接口)

本文详细介绍了如何使用Kokoro-82M-v1.1-zh模型搭建本地TTS服务,包括环境配置、模型部署、WebSocket接口实现及性能优化。通过实战指南,开发者可以快速掌握本地部署TTS系统的关键技术,提升语音交互应用的开发效率。

weixin_30776273的博客 184

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

爬取数据用java也可以实现_java爬取网页数据 - osc_y8z1vlz9的个人空间 - OSCHINA - 中文开源技术交流社区...

最近使用java实现了一个简单的网页数据抓取,下面是实现原理及实现代码:原理:使用java.net下面的URL对象获取一个链接,下载目标网页的源代码,利用jsoup解析源代码中的数据,获取你想要的内容1.首先是根据网址下载源代码:/*** 根据网址和编码下载源代码*@paramurl 目标网址*@paramencoding 编码*@return*/public staticString getHt...

weixin_35419402的博客 211

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java在网页中爬取数据并存入excel

pom中引入: <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.5</version> </dependency&...

水越帆的博客 2443

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java网页数据爬取

java网页数据爬取 写在前面 书签全部导出 爬取前的处理 开始爬取并保存 java网页数据爬取 写在前面 在浏览器书签中有许多经典的东西,有时候什么忘记了需要去查询的,也非常方便,但是痛苦的事情是某一天打开书签,居然那个页面不知道飞哪去了,打不开,作为一个程序员,当然不能容忍这种事情发生,那就把它们都爬下来。 书签全部导出 以chrome浏览器为例:打开右上角...

UremSept 891

用Java爬取数据(url爬取文件)

Java爬取接口的数据 首先让大家看看爬取的数据结果 46884 条数据 由于**原因就不公布内容了 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200827100145755.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzIyNDc5Nw==,size_16,color_FFFFF

weixin_43224797的博客 3150

java爬取网页模拟表单提交后的数据并进行处理

   最近在做一个关于数据爬取的功能,在此记录一下。(该功能主要是模拟表单提交后获取提交后的页面的数据,我们再进行处理)本文章用(http://www.suanmingde.com/xingming/xmpd/)网站作为例子,如有侵权等请联系我删除。    下面帖代码: String name1="王也"; String name2="诸葛青"; Integer x...

weixin_41541415的博客 3515

java爬取_java爬取下载文件

1、目标从http://www.bzmfxz.com/biaozhun/Soft/SJDZBZ/List_1.html中下载所有的压缩文件,每一页都要下载2、语言:Javapackage spiderPdf;import java.io.BufferedReader;import java.io.File;import java.io.FileOutputStream;import java.io...

weixin_39620151的博客 461

java 基于selenium实现爬取天气网数据

感觉java做爬虫效果也是还不错的,我总结了下主要有以下三种: (一)基于jsoup (二)基于httpcilent (三)基于selenium 第一种和第二种类似,没多大难度,用法也很相似,但是经我亲自测试有个缺点:不能采集基于ajax请求的数据。这个就很令人蛋疼了。。。 第三种方法实际是基于浏览器的驱动模拟人工操作的,理论上可以采集网页的任何数据。不便之处就是每次需要打开一个浏览器不过也能接受。 今天主要就说说基于selenium实现爬取数据吧!! 第一步:pom.xml引入

喜文BLOG 633

java实现网页爬虫

接着上面一篇对爬虫需要的java知识,这一篇目的就是在于网页爬虫的实现,对数据的获取,以便分析。 ----->   目录:   1、爬虫原理 2、本地文件数据提取及分析 3、单网页数据的读取 4、运用正则表达式完成超连接的连接匹配和提取 5、广度优先遍历,多网页的数据爬取 6、多线程的网页爬取 7、总结 爬虫实现原理 网络爬虫基本技术处理 网络爬虫是数据采集的一种方法,实

goaago的博客 217
上一篇: Eclipse开发环境下Java可视化界面编程
下一篇: ScrollView实现界面自动滚动
程序员null
博客等级 码龄11年 1305粉丝 124原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值