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操作
六:结果展示
电影图片:
数据库展示:
本文标签: 简单
j9九游会老哥俱乐部交流区的版权声明:本文标题:java爬虫框架——jsoup的简单使用(爬取电影天堂的所有电影的信息,包括下载的链接) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1727410142a1113432.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。