[记录]Java网络爬虫基础和抓取网站数据的两个小实例

爬虫入门(五)抓取网页数据 前面已经实现了获取整个网页HTML的功能,并且在获取HTML的基础上,加上一些诸如:下载出错自动重试、用户代理、服务器代理、爬取深度、避免重爬、id遍历、链接遍历等进阶功能。而且在处理过程中也初步使用了正则表达式。 但是前面我们获取的HTML中的数据很多,其中大部分是我们不需要的。因此在本节中,我们要介绍对比三种抓取数据的方式,也可以叫选择器,并给出他们的性能对比,以供选择。 1.分析网页 在抓取一个网页之前的具体内容之前,我们首先应该分析一下网页的结构。网页的构成是一种标签化的结构语言编写的。这些标 阅读详情

前段时间在学习爬虫,并从网络抓取了一些简单的数据,记录一下。

抓取分成下面3个部分:

1、网络请求

2、解析抓取下来的页面,并且处理乱码或者解压代码的问题

3、拿到指定的数据、资源

完整代码如下:

第一个实例:

/**
	 * 从某网站查找所有帖子标题
	 * 把所有标题和链接存放在txt文件里面
	 */
	public static Map<String, String> parseClPage(){
		String html = "http://cl.xxxx/thread0806.php"; // 解析的网站域名
		String currentuserdesktop = System.getProperty("user.home")+"\\Desktop";  // 获取操作系统为windows的桌面路径
		Map<String, String> resultMap = new TreeMap<String, String>(); // 结果-链接
		Document doc = null;
		try {
			for (int i = 0; i < 199; i++) { // 设置扫描的页数范围
				StringBuffer htmlCode = new StringBuffer("");
				HttpMethod httpMethod = new GetMethod("http://cl.xxxx/thread0806.php?fid=7&search=&page="+(i+1));
				HttpClient client = new HttpClient(); // 以下是设置网络请求的头信息,可以直接用浏览器的头信息
				httpMethod.addRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
				httpMethod.addRequestHeader("Accept-Encoding", "gzip, deflate, sdch");
				httpMethod.addRequestHeader("Accept-Language", "zh-CN,zh;q=0.8");
				httpMethod.addRequestHeader("Referer", "http://cl.clvv.biz/thread0806.php?fid=7");
				httpMethod.addRequestHeader("HTTPS", "1");
				httpMethod.addRequestHeader("Connection", "keep-alive");
				httpMethod.addRequestHeader("Host", "cl.clvv.biz");
				httpMethod.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36ozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36");
				client.setTimeout(3000);
				client.executeMethod(httpMethod);
				InputStream inputStream = httpMethod.getResponseBodyAsStream();// 得到网络请求返回的HTML流
				GZIPInputStream gzipInputStream = new GZIPInputStream(inputStream);// 解压压缩的HTML流,解压方式是GZIP
				InputStreamReader inputStreamReader = new InputStreamReader(gzipInputStream,Charset.forName("gb2312")); // 转码
				BufferedReader bin21 = new BufferedReader(inputStreamReader);
				while(bin21.readLine()!=null){
					String line = bin21.readLine();
					htmlCode.append(line);
				}
				doc = Jsoup.parse(htmlCode.toString()); // 解析html用的是操作较简单的jsoup包
				Elements elementsTr = doc.select("table tr"); // 用jQuery方式解析特定的数据域
				for (Element element : elementsTr) {
					String title = element.select("td").eq(1).select("h3 a").text();
					if(null!=title && !"".equals(title)){
						String link = "http://cl.xxxx/"+element.select("td").eq(1).select("h3 a").attr("href");
						// 文件流
						writefiletotxt((new FileWriter(currentuserdesktop+"\\查找结果.txt",true)),("标题:"+title+"\t链接:"+link+"\r\n"));
					}
				}
				// 释放链接
				httpMethod.abort();
				httpMethod.releaseConnection();
			}
			System.out.println("done--");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return resultMap;
	}
	public static void writefiletotxt(FileWriter fw,String result){
		try {
			fw.write(result);
			fw.flush();
			fw.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

第二个实例:抓取网站图片。思路和第一个差不多

/**
 * @author 高攀
 * @上午9:58:01
 */
public class CatchImages {
	
	private static String curdesktop = System.getProperty("user.home")+"\\Desktop\\CatchImages\\";
	
	public static void main(String[] args) {
		doCatch("http://item.jd.com/716240.html");
	}
	
	// 网络请求并且拿到图片链接
	public static Integer doCatch(String site){
		GetMethod method = new GetMethod(site);
		HttpClient client = new HttpClient();
		
		try {
			method.addRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
//			method.addRequestHeader("Accept-Encoding", "gzip, deflate, sdch");
			method.addRequestHeader("Accept-Language", "zh-CN,zh;q=0.8");
			method.addRequestHeader("Avail-Dictionary", "XprLfaXG");
			method.addRequestHeader("Cache-Control", "max-age=0");
			method.addRequestHeader("Connection", "keep-alive");
			method.addRequestHeader("Cookie", "");
			method.addRequestHeader("Host", "user.qzone.qq.com");
			method.addRequestHeader("If-Modified-Since", "Thu, 24 Sep 2015 02:55:30 GMT");
			method.addRequestHeader("Upgrade-Insecure-Requests", "1");
			method.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36ozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36");
			
			client.executeMethod(method);
			String htmlCode = method.getResponseBodyAsString();
			// 得到所有的img标签的链接
			Document doc = Jsoup.parse(htmlCode);
			Elements elementImg = doc.select("body img");
			for (Element element : elementImg) {
				String src = element.attr("src");
				if(src.contains("http")){ // 绝对路径就不变
					
				}else { // 否则变成绝对路径
					String rootUrl = HTMLParserHelper.getRootUrl(site); // 得到根路径
					// 加上跟路径
					src = rootUrl+src;
				}
				System.out.println(src);
				downloadImage(src);
				System.out.println("ok");
			}
			System.out.println(elementImg.size()+" result catched.");
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			method.abort();
			method.releaseConnection();
		}
		return 0;
	}

	// 下载图片的方法
	public static void downloadImage(String imageUrl){
		GetMethod method = new GetMethod(imageUrl);
		HttpClient client = new HttpClient();
		try {
			client.executeMethod(method);
			InputStream inputStream = method.getResponseBodyAsStream();
			
			File file = new File(curdesktop);
			if(!file.exists()){
				try {
					file.mkdir();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			
			byte b[] = {1};
			int size = 0;
			FileOutputStream outputStream = new FileOutputStream(new File(curdesktop+HTMLParserHelper.getImageNameAndHouzui(imageUrl)));
			while((size=inputStream.read(b))!=-1){
				outputStream.write(b, 0, size);
			}
			outputStream.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			// 释放链接
			method.abort();
			method.releaseConnection();
		}
		
	}
}


涉及的包百度:Httpclinet、Jsoup

教你如何使用Java代码从网页中爬取数据到数据库中——网络爬虫精华篇 文章目录1:网络爬虫介绍2:HttpClients类介绍2.1 HttpGet参数问题2.2 HttpPost参数问题2.3 连接池技术问题3:Jsoup介绍4:动手实践如何抓取网页上数据并保存到自己数据库中 有一句话说的好,只要精神不滑坡,办法总比困难多——阿俊(这句话可以形容我这三天学习知识的态度) 就在前天,我的一个项目进入到了省赛,想下定决心把自己的一部分未完成的功能完善起来(想爬取网页上的各种数据到自己的所对应的页面上显示),这个问题在我脑子里回旋许久,于是打开电脑就在网上查阅各种资料,而我第一次 阅读详情

相关推荐

java jsoup 网络爬虫 学习例子(四)抓取网页连接插入mysql数据库

java jsoup 网络爬虫 学习例子(四) 抓取网页连接插入mysql数据库 package com.iteye.injavawetrust.jsoup; import java.io.IOException; import java.util.Iterator; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; i...

15万+

thread0806.php fid 2,抓取1024用户名 Hey,Hey,Hey

#coding:gb2312importurllibimportreimporturllib2importgzipfromxmlrpclibimportgzip_decodeimportsysimporttimedefgetHtml(url):req_header={'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64;r...

weixin_42627459的博客 1万+

如何抓取天猫和淘宝的运营数据?

淘宝为了屏蔽网络爬虫对自身数据(例如商品价格、月销量、收藏量、评价、月成交记录等等)的抓取,往往是采取一种名叫Ajax的技术,在网页加载完成后,再次加载这些数据,所以通用的网络爬虫抓取技术对抓取淘宝的这些数据是无效的。 对通用网站的数据抓取,比如:谷歌和百度,都有自己的爬虫,当然,爬虫也都是有程序写出来的。根据百度百科的定义:网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动的...

程序之道的博客 6488

python3爬取1024图片

这两年python特别火,火到博客园现在也是隔三差五的出现一些python的文章。各种开源软件、各种爬虫算法纷纷开路,作为互联网行业的IT狗自然看的我也是心痒痒,于是趁着这个雾霾横行的周末瞅了两眼,作为一名老司机觉得还是应该以练带学,1024在程序员界这么流行的网站,当然拿来先练一练。 python自称是以自然语言的视角来编程,特点是开发快,语言简洁,...

weixin_34192993的博客 1612

网络爬虫技术Jsoup——爬到一切你想要的

概述:本周五,接到一个任务,要使用爬虫技术来获取某点评网站里面关于健身场馆的数据,之前从未接触过爬虫技术,于是就从网上搜了一点学习资料,本篇文章就记录爬虫技术Jsoup技术,爬虫技术听名称很牛叉,其实没什么难点,慢慢的用心学习就会了。

常灿光的博客 4万+

网络爬虫技术总结

摘要: 对于大数据行业,数据的价值不言而喻,在这个信息爆炸的年代,互联网上有太多的信息数据,对于中小微公司,合理利用爬虫爬取有价值的数据,是弥补自身先天数据短板的不二选择,本文主要从爬虫原理、架构、分类以及反爬虫技术来对爬虫技术进行了总结。1、爬虫技术概述网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,它们被广泛用于互联网搜索引擎或其他类似网站,可以自动

yishouwangnian的博客 2060

手把手教会你用Python爬虫爬取网页数据!!

爬虫就是自动获取网页内容的程序,例如搜索引擎,Google,Baidu 等,每天都运行着庞大的爬虫系统,从全世界的网站中爬虫数据,供用户检索时使用。爬虫流程其实把网络爬虫抽象开来看,它无外乎包含如下几个步骤模拟请求网页。模拟浏览器,打开目标网站。获取数据。打开网站之后,就可以自动化的获取我们所需要的网站数据。保存数据。拿到数据之后,需要持久化到本地文件或者数据库等存储设备中。那么我们该如何使用 Python 来编写自己的爬虫程序呢,在这里我要重点介绍一个 Python 库:Requests。

2301_78165187的博客 9282

什么是网络爬虫?有哪些作用?如何构建?

根据We Are Social和Hootsuite的2018年全球数字新报告,全球互联网用户数量刚刚超过40亿,比2017年增长7%。人们正在以前所未有的速度转向互联网,我们在互联网上做的很多行为产生了大量的“用户数据”,比如评论,微博,购买记录等等。这一点也不奇怪,互联网目前是分析市场趋势,监视竞争对手或者获取销售线索的最佳场所,数据采集以及分析能力已成为驱动业务决策的关键技能。而...

Yummy的博客 3331

【吐血整理】Python爬虫实战!从入门到放弃,手把手教你数据抓取秘籍

网络爬虫,又称为网页蜘蛛或爬虫,是一种用来自动浏览万维网的程序。它按照一定的算法顺序抓取网页内容,同时将抓取到的数据存储起来,用于进一步的分析和处理。定义:网络爬虫是一个自动提取网页的程序,它从互联网上采集网页并提取其中的信息。重要性:网络爬虫在信息获取、数据挖掘、搜索引擎构建等方面发挥着关键作用。它帮助我们从海量的网络信息中提取有价值的数据,为大数据分析、市场研究、学术研究等提供原始材料。

eclipsercp的博客 6122

Java网络爬虫:网页数据抓取与处理指南

网络爬虫是一种自动化提取网页数据的脚本程序,它模仿人类用户对网页的浏览行为,通过HTTP协议请求网页,然后解析和提取网页中的信息。爬虫广泛应用于搜索引擎、数据挖掘、监控分析等领域。在技术层面,网络爬虫主要关注如何高效、稳定地从网站获取数据,并将获取的数据用于各种分析和处理。Apache HttpClient是一个功能丰富的HTTP客户端库,它支持HTTP协议的所有版本和各种HTTP特性,如连接管理、重定向处理、自动压缩、代理支持、SSL/TLS连接等。

weixin_42509507的博客 2538

Java Websphinx网络爬虫实战课程

本文还有配套的精品资源,点击获取 简介:网络爬虫是自动遍历并抓取网页信息的工具,Java因跨平台、稳定性和强大的库支持在爬虫开发中十分流行。Websphinx是Java开发的网络爬虫框架,本课程将探讨Java在网络爬虫开发中的关键知识点,包括HTTP通信、HTML解析、数据存储、多线程处理、URL管理、延迟加载与JavaScript处理、异常处理、IP代理、日志记录以及分布...

weixin_36019375的博客 1748

学 Java 网络爬虫,需要哪些基础知识?

说起网络爬虫,大家想起的估计都是 Python ,诚然爬虫已经是 Python 的代名词之一,相比 Java 来说就要逊色不少。有不少人都不知道 Java 可以做网络爬虫,其实 Java 也能做网络爬虫而且还能做的非常好,在开源社区中有不少优秀的 Java 网络爬虫框架,例如 webmagic 。我的第一份正式工作就是使用 webmagic 编写数据采集程序,当时参与了一个舆情分析系统的开发,这里...

平头哥的技术博文 1万+

使用Java和JDBC从安居客抓取房产信息到MySQL数据库

Google Maps API是谷歌公司提供的一项强大的地图服务接口,它允许开发者在自己的应用程序中嵌入谷歌地图,实现地图展示、地点搜索、路径规划等多种地图服务功能。API的使用需要遵守谷歌的服务条款,并且通常需要申请一个API密钥来进行访问控制。JDBC(Java Database Connectivity)是一个Java API,它定义了Java程序如何与数据库交互的标准。使用JDBC,开发人员可以编写能够与各种数据库交互的代码。

weixin_29050829的博客 1429

Java网络爬虫简介

一、爬虫介绍 1. 概述 网络爬虫(Web crawler)也叫网络蜘蛛(Web spide)自动检索工具(automatic indexer),是一种”自动化浏览网络“的程序,或者说是一种网络机器人。 爬虫被广泛用于互联网搜索引擎或其他类似网站,以获取或更新这些网站的内容和检索方式。 它们可以自动采集所有其能够访问到的页面内容,以供搜索引擎做进一步处理(分检整理下载的页面),而使得用户能更快的检索到他们需要的信息。 2. 应用 2.1 搜索引擎 爬虫程序可以为搜索引擎系统爬取网络资源,用户可以通过搜索引擎

weixin_41422086的博客 3352

claude使用教程

提供了三种模型:claude,codex, gemini,三种模型都共用同一个apikey, 有开发需求使用claude效果较好,知识问答等场景gemini效果会更好些,本文只提供了claude的安装方式,剩下两种按需按照以下参考链接安装下即可,安装有问题参考文档:https://www.aicodemirror.com/dashboard/official-installation/macos-linux (不需要挂梯子,自己手机号注册就好)

lichao19871216的博客 3503

国产FPGA开发实战:紫光同创编程软件中的约束文件详解与常见问题

本文详细解析了紫光同创FPGA编程软件中约束文件的关键配置技巧与常见问题。通过基础架构解析、时钟约束实践、物理约束调控及典型问题排查指南,帮助开发者高效掌握国产FPGA开发中的约束文件应用,提升开发效率与设计稳定性。

gin88的博客 911

python网络爬虫、Java 网络爬虫,哪个更好?

以上就是爬虫的一些基本知识,主要介绍了网络爬虫的使用工具和反爬虫策略,这些东西在后续对我们的爬虫学习会有所帮助,由于这几年断断续续的写过几个爬虫项目,使用 Java 爬虫也是在前期,后期都是用 Python,最近突然间对 Java 爬虫又感兴趣了,所以准备写一个爬虫系列博文,重新梳理一下 Java 网络爬虫,算是对 Java 爬虫的一个总结,如果能帮助到想利用 Java 做网络爬虫的小伙伴,那就更棒啦。就是遵循被爬服务器的规则,不去影响被爬服务器的正常运行,不把被爬服务搞垮,这就是有 “道德” 的爬虫。..

weixin_38983846的博客 3968

【在英伟达nvidia的jetson-orin-nx上使用调试can基础收发-硬件连接-开机自启动can-初步调试】

近期开始学习英伟达的工控板,作为新手还是有很多不同懂得地方,但是一部分它用的linux系统,有点像玩树莓派,通过自己一段时间学习can调试,终于可以简单通信了。开始的时候,自己也是什么都不是很懂,从新手一点点摸索过来,现在使用工控机,简单can通信也已经没有问题了,算是有些进步吧。每一步走的都很艰辛,需要反复验证,才能准去无误,开始以为发送没有问题就没事了,没想到发送可以却接受不行,每一步都要反复确认啊,这个问题会持续关注下吧。

qq_22146161的博客 6123

使用java实现网络爬虫

之前学习j2ee的搭建,基本完成了。 接下来想学习下爬虫技术。要研究一项技术,首先得知道它的原理。 那么网络爬虫的原理是什么呢? 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的 URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。  接下来我会一

75闪光雷的博客 5867

ESP32小车DIY:从零搭建无线遥控智能车(附完整代码与避坑指南)

本文详细介绍了如何从零开始DIY一台基于ESP32的无线遥控智能小车。内容涵盖核心硬件选型、电路设计、低延迟ESP-NOW无线通信协议的配置与实战,以及双电机差速控制算法与PWM调速的实现。文章提供了完整的代码示例和关键的避坑指南,旨在帮助开发者快速构建稳定可靠的智能车平台,并为进一步的功能扩展奠定基础。

gamma的博客 471

【100%通过率】2024华为OD机试真题E卷 C++语言 实现【流浪地球】

流浪地球计划在赤道上均匀部署了N个转向发动机,按位置顺序编号为0~N-1。 1) 初始状态下所有的发动机都是未启动状态; 2) 发动机起动的方式分为“手动启动”和“关联启动”两种方式; 3) 如果在时刻1一个发动机被启动,下一个时刻2与之相邻的两个发动机就会被“关联启动”; 4) 如果准备启动某个发动机时,它已经被启动了,则什么都不用做; 5) 发动机0与发动机N-1是相邻; 地球联合政府准备挑选某些发动机在某些时刻进行“手动启动”,当然最终所有的发动机都会被启动。 哪些发动机最晚被启动呢?

MISAYAONE的博客 4212

数据挖掘的前提---信息抓取:通用爬虫和聚焦爬虫

一. 互联网信息抓取 二. 爬虫概述 三. 通用爬虫和聚焦爬虫 四. Nutch搜索引擎 五. 爬虫实例分析:舆情信息汇聚 一. 互联网信息抓取 随着网络的迅速发展,Internet (万维网)成为当今世界最大的信息载体,每天又有不可计数的新数据涌入Internet 中。如今, 人们面临的一个巨大的挑战就是如何从海量数据中提取有效信息并加以利用。“ 要处理数据,就要先得到数据”,从Internet 上将数据获取下来,是进行数据处理的第一步。互联网信息自动抓取,最常见且有效的方式是使..

csdn_bajie 6226

Python 爬虫实战:微博自动化运营工具(点赞 / 转发 / 评论 + 反封号策略)

微博作为中国最大的社交媒体平台之一,拥有庞大的用户群体和丰富的数据资源。通过 Python 爬虫技术,我们可以实现微博的自动化运营,包括点赞、转发、评论等功能,同时采取有效的反封号策略,确保账号的安全和稳定运行。

u014481728的博客 1179
上一篇: [分享]Java之Bean、Map、Json之间的互相转换工具类
下一篇: Hibernate关于的Timestamp的问题
51码上有猿
博客等级 码龄14年 320粉丝 69原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值