栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Java爬虫(一)入门篇---Jsoup工具

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java爬虫(一)入门篇---Jsoup工具

前言

之前工作中需要用到爬虫,就去学习了几种Java爬虫工具,也了解pythoy的scrapy框架也是大名鼎鼎,但是据了解可能不太适合我们的业务,所以以下所要介绍的均为Java框架下的爬虫

一、准备工作

1、下载jsoup工具,如果是maven项目,请在pm.xml中加入以下代码:

jsoup虽然不是一个很强大的爬虫工具,但是它对于网页html文档的各种处理确实是很强大的,同时自身也是个非常好用的爬虫,也许无法去做较大难度的数据的抓取,但我认为它是个非常优良的文档处理助手


    org.jsoup
    jsoup
    1.7.3

2、确定所要抓取的网站地址:

这里我以百度数据为例:
搜索 “互联网” 相关数据,


获取如上网页中所显示的信息,
下面就开始编写jsoup爬虫代码;

	private static String url = "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=互联网";
	
	public static void main(String[] args) throws Exception {
		//链接到目标地址
		Connection connect = Jsoup.connect(url);
		//设置useragent,设置超时时间,并以get请求方式请求服务器
		document document = connect.userAgent("Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)").timeout(6000).ignoreContentType(true).get();
		Thread.sleep(1000);
		//获取指定标签的数据
		Element elementById = document.getElementById("content_left");
		//输出文本数据
		System.out.println(elementById.text());
		//输出html数据
		System.out.println(elementById.html());
	}

查询结果如下:

以上方式就是使用jsoup获取文本数据的基本操作,下面我们继续尝试在以上基础上获取页面中所有的图片
	private static String url = "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=互联网";
	
	public static void main(String[] args) throws Exception {
		//链接到目标地址
		Connection connect = Jsoup.connect(url);
		//设置useragent,设置超时时间,并以get请求方式请求服务器
		document document = connect.userAgent("Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)").timeout(6000).ignoreContentType(true).get();
		Thread.sleep(1000);
		//获取指定标签的数据
		Element elementById = document.getElementById("content_left");
		//输出文本数据
		//System.out.println(elementById.text());
		//输出html数据
		//System.out.println(elementById.html());
		
		//获取所有图片链接
		Elements imgtag = document.getElementsByTag("img");
		List imgurlList = new ArrayList();
		for (int i = 0; i < imgtag.size(); i++) {
			if (StringUtils.isNotEmpty(imgtag.get(i).attr("src"))&&imgtag.get(i).attr("src").startsWith("http")) {
				System.out.println(imgtag.get(i).attr("src"));
			}
		}
	}

输出如下:

由上可以获取到图片链接,下面就是使用jsoup把图片下载下来了,有兴趣的朋友可以试试用这种方法去抓取淘宝商品图片,会更简单方便

根据图片链接下载图片
    
    public 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格式的%20
     imgUrl = imgUrl.substring(0, imgUrl.lastIndexOf('/') + 1) + urlTail.replaceAll("\+", "\%20");

 } catch (UnsupportedEncodingException e) {
     e.printStackTrace();
 }
 // 写出的路径
 File file = new File(filePath + File.separator + fileName);

 try {
     // 获取图片URL
     URL 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();
 }

    }

有问题欢迎交流与指正,谢谢

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/219812.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号