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

手把手教你用Matlab解析Zygo .dat文件:从二进制数据到面形图(附完整流程)

本文详细介绍了如何使用Matlab解析Zygo干涉仪生成的.dat文件,从二进制数据读取到面形图可视化的完整流程。通过实例代码演示了文件结构解析、数据矩阵读取、高阶Zernike拟合等关键技术,帮助工程师和研究人员高效处理光学检测数据,提升分析精度和工作效率。

weixin_30731305的博客 451

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

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

m0_74120645的博客 2962

LIN 协议测试

如下图,使用PicoScope示波器抓取报文Id为0x18的波形,数据场Byte1的长度为519.994μs,Byte1共10bit,计算位时间:tBit= 519.994/10 = 51.9994μs,符合预期。■ 唤醒信号是一个250μs到5ms的显性电平,发送唤醒信号的节点发送唤醒信号后150ms~250ms没有收到其他节点的唤醒信号,发送唤醒信号的节点发送新的唤醒信号。对于LIN主节点,检查发送的帧头长度是否符合设计要求,对于LIN从节点,检查从节点能否正确响应设计范围之内的帧头长度。

m0_63902994的博客 5936

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

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

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

别再傻傻分不清!一文讲透电子产品‘冲击’与‘碰撞’试验的区别与选用(附GB/T 2423标准解读)

本文详细解析了电子产品可靠性测试中冲击与碰撞试验的核心区别与应用场景,结合GB/T 2423标准提供实用指南。冲击测试模拟瞬时高强度事件(如跌落),而碰撞测试针对重复性力学环境(如运输颠簸)。通过参数对比和标准解读,帮助研发人员精准选择测试方案,提升产品可靠性验证效率。

weixin_42665255的博客 267

远心F-theta镜ZEMAX设计

根据给出的F-theta镜的设计指标,对F-theta镜进行了具体的光学设计。从对F-theta镜设计思想的介绍出发,对选取的初始结构进行了优化设计,优化完成后,对所设计的F-theta镜进行了像质评价,通过点列图、场曲与畸变图、相对照度、能量集中度对所设计的F-theta镜进行了分析,最终,对F-theta镜的设计效果进行了验证。

hitliuyi17的博客 9435

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

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

weixin_39675289的博客 2460

C++面向对象编程-继承与派生练习题

2、共同派生类 3、人员类Person的派生(虚基类的使用)

编程小鹏的博客 1193

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

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

GUO_YANG_FAN的博客 2243

一文读懂OpenClaw:核心组件与工作原理深度解析

Agent核心:负责理解意图、规划任务、协调执行消息系统:统一的消息格式,实现组件间解耦工具注册表:可扩展的工具系统,支持自定义工具模型适配层:多模型支持,统一API接口安全机制:沙箱隔离、权限确认、操作审计性能优化:并行执行、智能缓存、增量更新理解这些核心组件和工作原理,将帮助你更好地使用OpenClaw,也为后续开发自定义扩展打下坚实基础。在下一篇文章中,我们将详细介绍OpenClaw的界面操作,包括命令行与交互模式的各种技巧。

gaoxiang_120的专栏 833

交通仿真软件:SUMO_(1).SUMO基础知识

SUMO 中的交通网络由节点(junctions)和边(edges)组成。节点表示交叉口或路网的连接点,边表示连接节点之间的道路。节点:节点文件(.nod.xml)定义了网络中的所有节点。每个节点有一个唯一的 ID 和坐标。</边:边文件(.edg.xml)定义了连接节点的边。每个边有一个唯一的 ID、起点节点 ID 和终点节点 ID。</车辆文件(.vtype.xml)定义了不同类型的车辆。每个车辆类型可以有不同的参数,例如长度、最大速度、加速度等。</

kkchenjj的博客 1432

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

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

weixin_35419402的博客 211

QT+Halcon实现螺纹检测

工业上要检测螺丝的内外直径、内外牙距、内外角度,现在比较好用的图像处理库,开源的opencv,收费的有halcon。为了实现螺纹检测,和对比螺纹检测拿个库比较好。分别用opencv和halcon实现了螺纹检测,通过对比发现用halcon实现的效果比较。现在用博客把实现过程记录下来: 1、需要检测的螺纹数据如下: 2、为了实现检测螺丝以上数据,螺纹内径、螺纹外径、螺纹外牙距、螺纹...

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 7052

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

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

水越帆的博客 2443

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java网页数据爬取

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

UremSept 891

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

用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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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、付费专栏及课程。

余额充值