admin管理员组

文章数量:1559099

                                java爬虫——jsoup

一:所需知识

1.io操作

2.简单学习框架jsoup

3.多线程

二:java文件介绍

1.main.java --------------------程序入口

2.jsoupdemo.java-------------------爬虫的逻辑部分

3.movies.java--------------------javabean类

4.moviesdao.java----------------有关数据库的操作

5.bt_picture.java------------------电影图片下载到本机


三:程序流程

1.通过链接分析,发现http://www.bttiantangs/list/dianying/index_2.html中的2代表页码,该j9九游会老哥俱乐部交流区首页一共有500页

2.每当爬取一页时,从电影标题中获取下一页的链接


3.解析电影详情页中你所需要的信息。

四:程序代码

main.java:

import java.util.list;
public class main {
	public static void main(string [] args) throws exception{
		int k=0;                     //用来计数
		moviesdao md=new moviesdao();//用来对获取到的数据插入数据库
		bt_picture p=new bt_picture();//用来下载图片
		for(int i=2;i<50;i  ){        //爬取地址的总数
			string url="http://www.bttiantangs/list/dianying/index_" i ".html";//爬取的地址
			jsoupdemo jsoup=new jsoupdemo();
			//获取某一页的所有电影详情页下的连接
			list href=jsoup.link(url);
			list  m=jsoup.get(href);
			for(movies e:m){
				k  ;
				//插入数据库
				p.download(e);
				md.insert(e.gettitle(), e.getyear(), e.getcontry(), e.getlan(), e.getdouban_link(), e.getintroduce(), e.getmain_actor(), e.getdownload_, e.getimg_);
				system.out.println(k);
			}
			
		}
		
	}
}

jsoupdemo.java

jsoup的使用都在这

package jsoup;
import java.io.ioexception;
import java.util.arraylist;
import java.util.list;
import org.jsoup.connection;
import org.jsoup.jsoup;
import org.jsoup.nodes.document;
import org.jsoup.nodes.element;
import org.jsoup.select.elements;
public class jsoupdemo {
	//获取第二级页面的所有链接地址并返回
	public list link(string url) throws exception{
		//由于获取的连接只是一部分,所以要拼接
		string link="http://www.bttiantangs";
		list  href=new arraylist<>();
		connection conn=jsoup.connect(url).timeout(30000);
		document doc=conn.get();
		//system.out.println(doc.html());
		elements ele=doc.select(".article >h2>a");
		for(element element:ele){
			string a=element.attr("href");
			//拼接完整的连接
			string full=link a;
			href.add(full);
		}
		return href;
	}
	
	
	//根据第二级页面的链接,将爬取到的电影集合返回
	
	public list get(list href) throws ioexception {
		list ls=new arraylist<>();
		for(string h:href){
			movies m=new movies();
			connection conn=jsoup.connect(h).timeout(30000);
			document doc;
			try {
				doc = conn.get();
			} catch (ioexception e) {
			    conn=jsoup.connect("http://www.bttiantangs/movie/50680.html").timeout(30000);
			    doc = conn.get();
				e.printstacktrace();
			}
			elements ele_title=doc.select(".article_container >h1");//电影标题
			m.settitle(ele_title.get(0).text());
			elements ele_p=doc.select("#post_content :nth-child(2)");//电影其他信息
			string p=ele_p.text();
			string sum[]=p.split("◎");
			for(string s:sum){
				//年代截取
				if(s.contains("年  代")){
					m.setyear(s.substring(5, s.length()));
				}
				//国家截取
				if(s.contains("国  家")){
					m.setcontry(s.substring(5, s.length()));
				}
				//语言截取
				if(s.contains("语  言")){
					m.setlan(s.substring(5, s.length()));
				}
				//豆瓣链接
				if(s.contains("豆瓣链接")){
					m.setdouban_link(s.substring(5, s.length()));
				}
				//主演
				if(s.contains("主  演")){
					m.setmain_actor(s.substring(5, s.length()));
				}
				
				
			}
			
			//电影图片
			elements ele_img=doc.select(".tpic-cont-s >img:nth-child(1)");
			//有的不存在电影图片
			if(!ele_img.isempty()){
				m.setimg_);
			}
			
			//电影简介
			elements ele_introduce =doc.select(".minfos");
			//有的不存在电影简介
			if(!ele_introduce.isempty()){
				m.setintroduce(ele_introduce.text());
			}
			//电影下载地址
			elements ele_download=doc.select(".dlist >li >a:nth-child(2)");
			if(!ele_download.isempty()){
				m.setdownload_url(/uploads/image/dianzi/ele_download.get(0).attr("href"));
			}
			
			ls.add(m);
		}
		return ls;
	}
}

movies.java

package jsoup;
public class movies {
	private string title;//电影标题
	private string year;//电影年份
	private string country;//国家
	private string lan;//语言
	private string douban_link;//豆瓣连接
	private string introduce;//简介
	private string main_actor;//主演
	private string download_url;//下载地址
	private string img_url;//图片下载地址
	public movies(){
		title="null";
		year="null";
		country="null";
		lan="null";
		douban_link="null";
		introduce="null";
		main_actor="null";
		download_url="null";
		img_url="null";
		
	}
	public string gettitle() {
		return title;
	}
	public void settitle(string title) {
		this.title = title;
	}
	public string getyear() {
		return year;
	}
	public void setyear(string year) {
		this.year = year;
	}
	public string getcontry() {
		return country;
	}
	public void setcontry(string contry) {
		this.country = contry;
	}
	public string getlan() {
		return lan;
	}
	public void setlan(string lan) {
		this.lan = lan;
	}
	public string getdouban_link() {
		return douban_link;
	}
	public void setdouban_link(string douban_link) {
		this.douban_link = douban_link;
	}
	public string getintroduce() {
		return introduce;
	}
	public void setintroduce(string introduce) {
		this.introduce = introduce;
	}
	public string getmain_actor() {
		return main_actor;
	}
	public void setmain_actor(string main_actor) {
		this.main_actor = main_actor;
	}
	public string getdownload_ {
		return download_url;
	}
	public void setdownload_ {
		this.download_url = download_url;
	}
	public string getimg_ {
		return img_url;
	}
	public void setimg_ {
		this.img_url = img_url;
	}
	
}

moviesdao.java

package jsoup;
import java.sql.connection;
import java.sql.statement;
public class moviesdao {
	private util util;
	private connection conn;
	private statement st;
	public moviesdao() throws exception{
		util=new util();
		conn=util.conn();
		st=conn.createstatement();
	}
	//将电影信息存入数据库
	public void insert(string title,string year,string country,string lan,string douban_link,string introduce,string main_actor,string download_url,string img_url ) throws exception{
		string sql="insert into movies values('" title.replace("'", "") "','" year.replace("'", "") "','" country.replace("'", "") "','" lan.replace("'", "") "','" douban_link.replace("'", "") "','" introduce.replace("'", "") "','" main_actor.replace("'", "").replaceall("     ", "") "','" download_url.replace("'", "") "','" img_url.replace("'", "") "');";
		system.out.println(sql);
		st.executeupdate(sql);
	}
}

bt_picture.java

图片下载

package jsoup;
import java.io.file;
import java.io.fileoutputstream;
import java.io.ioexception;
import java.util.list;
import org.jsoup.connection;
import org.jsoup.connection.response;
import org.jsoup.jsoup;
public class bt_picture {
	/**
	 * 
	 * @param ls 传递多来的有关电影的信息,包括所需要的图片地址,和电影名称
	 * @throws ioexception 
	 */
	public void download(movies e) throws ioexception  {
		string url=e.getimg_;
		//图片链接有的没
			if(url=="null"){
				url="https://ws2.sinaimg/large/6c7edb3fly1fguvf22hznj215o0k67h5.jpg";
			}
			connection conn=jsoup.connect(url);
			response rs=conn.ignorecontenttype(true).timeout(3000).ignorehttperrors(true).execute();
			//存放图片的数组
			byte b[]=rs.bodyasbytes();
			file file = new file("e:/bt_movies_picture",e.gettitle().replace(":", "") ".jpg");
	        if (!file.exists()) {
	            fileoutputstream raf = new fileoutputstream(file);
	            raf.write(b);
	            raf.close();
	        }
	}
}

util.java

数据库的连接

package jsoup;
import java.io.inputstream;
import java.sql.connection;
import java.sql.drivermanager;
import java.util.properties;
public class util {
	//数据库连接
	public connection conn() throws exception{
		
//		//创建properties对象,用于加载配置信息
//		properties prop=new properties();
//		//将文件加载到字节输入流中
//		inputstream in=moviesdao.class.getclassloader().getresourceasstream("db_properties.properties");
//		//把流对象的数据放到prop对象中
//		prop.load(in);
//		string username=prop.getproperty("username");
//		string password=prop.getproperty("password");
//		string url=prop.getproperty("url");
//		string driver=prop.getproperty("driver");
		
		string username="root";
		string password="zp1759999";
		string url="jdbc:mysql://localhost:3306/bt_movies";
		string driver="com.mysql.jdbc.driver";
		system.out.println(username);
		//数据库连接
		//第一步:加载驱动
		class.forname(driver);
		//第二步:建立数据库连接
		connection conn=drivermanager.getconnection(url,username,password);
		return conn;
	}
	
}

五:总结

学习到的:

1.学会简单的jsoup 爬虫

2.学会用jsoup下载网络上的图片等文件

3.熟练jdbc

4.熟练io操作

六:结果展示

电影图片:


数据库展示:


本文标签: 简单