首页 > 网站 > WEB开发 > 正文

用java去爬取别人的网页上的内容

2024-04-27 15:19:17
字体:
来源:转载
供稿:网友

在爬取别人的东西之前,我们需要做一些处理

1.我们先在eclipse中创建一个工程

3. http://mvnrepository.com/artifact/org.jsoup/jsoup/1.10.2,进入这个网站,将下面这段代码复制下来

4.将copy的代码照如下的方式处理

5.点击保存,然后jsoup这个包就被我们引入,这时候就可以正式开始从网页上爬取别人的资料了

package com;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.*;import java.util.ArrayList;import java.util.List;import java.util.Scanner;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;public class getPIcDemo {	//1.从多图片的网页中获取众多的图片的地址,url代表网页的网址	public static List getmanyPicAdress(String Url) {		List<String> list=new ArrayList<>();		try {//我们先将url网络里面的			Document document=Jsoup.connect(Url).get();			//我们预先知道这个网页里面的图片的class属性的“relative block works-detail hover-none works-img-box”是唯一的,			//所以就得到了这些元素			//这些元素里面就包含了想要的信息					Elements elements=document.getElementsByAttributeValue("class", "relative block works-detail hover-none works-img-box");//			在elements中我们获取了多个element,element中就包含了网页链接			for (int i = 0; i < elements.size(); i++) {//				循环输出element,				Element element=elements.get(i);//				这时候,element.attr("href")就可以将href里面包含的网页链接内容写出来				list.add(element.attr("href"));			}					} catch (IOException e) {			// TODO Auto-generated catch block			e.PRintStackTrace();		}		return list;//我们用链表将所有的href里面的数据储存起来,最好不要用数组,因为我们不知道href数据有多少个	}	//	2.第一个方法,我们用getmanyPicAdress方法获取到了图片的详细地址,现在我们要做的,就是从图片的详细地址中获取图片的下载地址//	将第一个方法获得的链表值作为参数传入到函数中	public static List getPicAdress(List list) {		List<String> list1=new ArrayList<>();//		用循环读取一个个的链表里的内容(图片的详细地址)		for(int i=0;i<list.size();i++){		try {//			新建一个string,用来存储list里面的数据			String st=(String)list.get(i);//			将string读取的数据存入到document中			Document document =Jsoup.connect(st).get();//			因为我们找到的关于图片下载地址的唯一标识符,是class="works-img",先用elements将图片的下载地址找到			Elements elements=document.getElementsByAttributeValue("class", "works-img");//			再用element读出elements的数据				for(int m=0;m<elements.size();m++){					Element element=elements.get(m);//					最后用新的一个链表将数据装起来,并且返回					list1.add(element.attr("src"));				}		} catch (IOException e) {						e.printStackTrace();		}		}		System.out.println(list1);//		返回数据所获得的图片下载地址的值		return list1;	}		//3.用下载地址,下载图片//	将第二个方法返回的装载图片下载地址的链表作为参数返回链表	public static void test(List list) {				URL myurl;		InputStream is = null;		OutputStream os = null;				try {//			我们还是要用循环将链表里面的数据一个个读取出来,让后一个个的去下载			for (int i = 0; i < list.size(); i++) {//				还是用一个新的字符串去存储list读出来的数据				String string=(String) list.get(i);				//				因为涉及到图片的存储问题,名字显然不能一样,所以就让从图片的末尾的信息作为文件名//				从最后一个“/”开始读取,				int beginIndex=string.lastIndexOf("/");//				文件名就以最后一个/开始,直到结束				String picName=string.substring(beginIndex+1);				//				下列是根据链接读取图片的信息并储存的方法,不再赘述				myurl=new URL(string);				is=myurl.openConnection().getInputStream();				byte byte1[]=new byte[102400];				os=new FileOutputStream(picName);				int len;				while((len=is.read(byte1))!=-1){					os.write(byte1, 0, len);				}				os.flush();			}			os.close();			is.close();		} catch (MalformedURLException e) {			// TODO Auto-generated catch block			e.printStackTrace();		} catch (IOException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}	}		public static void main(String[] args) {		test(getPicAdress(getmanyPicAdress("http://www.nipic.com/photo/jingguan/index.html")));	}}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表