超简单的java爬虫

2017年11月10日23:17:50 2 326 views

上前个星期花了一天的时间看了webmagic,学着写了一个简单的爬虫。在此分享给需要学习的人。

先放上完整的源码,在放上爬取得内容。

过程不想写了,此文留作我参考使用。

先到webmagic官网下载相应的jar包。我这里也提供分享。

(一)

package sing.test;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.JsonFilePipeline;
import us.codecraft.webmagic.processor.PageProcessor;

public class SinaBlogProcessor implements PageProcessor {

	public static final String URL_LIST = "http://localhost:8080/cloudrecomm/course/job/\w+";

	public static final String URL_POST = "http://localhost:8080/cloudrecomm/51job/\w+\.html";
	
	public static final String URL_LIST2 = "http://localhost:8080/cloudrecomm/course/job/";

	private static int count = 0;

	//抓取网站的相关配置,包括编码、抓取间隔、重试次数等
	private Site site = Site
			.me()
			.setDomain("web")
			.setSleepTime(3000)
			.setUserAgent(
					"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31");


	// process是定制爬虫逻辑的核心接口,在这里编写抽取逻辑
	@Override
    public void process(Page page) {
    	Domian domian = new Domian();
       
    	//列表页
        if (page.getUrl().regex(URL_LIST).match()){
        	//找出每页的规律,然后把每页存入待爬取
        	for(int i=2 ;i<=10 ;i++){
        		page.addTargetRequest(URL_LIST2 + i);
        	}
        	//获取列表的div下的所有链接。利用xpath过滤,links获取链接,regex符合的正则表达。
            page.addTargetRequests(page.getHtml().xpath("//div[@class=\"main-right\"]").links().regex(URL_POST).all());
            page.addTargetRequests(page.getHtml().links().regex(URL_LIST).all());
            //文章页
        } else {
        	//内容页的内容,也是直接利用xpath获取html下内容
        	domian.setTitle(page.getHtml().xpath("/html/body/div[2]/div[2]/div[2]/div/div[1]/h1/text()").get());
        	domian.setPice(page.getHtml().xpath("/html/body/div[2]/div[2]/div[2]/div/div[1]/strong/text()").get());
        	//我自己定的爬取次数。想看到能爬取多少次。
        	count++;
        	//调用jdbc方法,存入数据库。
        	new SqlUitl().insert(domian);
        }
        
        
    }

	@Override
	public Site getSite() {
		return site;
	}
/**
 * .addUrl:要开始爬取得网页
 * 
 */
	public static void main(String[] args) {
		Spider.create(new SinaBlogProcessor())
				.addUrl("http://localhost:8080/cloudrecomm/course/job/1")
				.thread(100).run();
		System.out.println("得到" + count + "条记录");
	}
}

 

(二)

package sing.test;

public class Domian {
	private String title;
	private String pice;
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getPice() {
		return pice;
	}
	public void setPice(String pice) {
		this.pice = pice;
	}
}

(三)

package sing.test;

import java.sql.*;


public class SqlUitl {

	private static Connection getConn() {
	    String driver = "com.mysql.jdbc.Driver";
	    String url = "jdbc:mysql://localhost:3306/crawler";
	    String username = "root";
	    String password = "123456";
	    Connection conn = null;
	    try {
	        Class.forName(driver); //classLoader,加载对应驱动
	        conn = (Connection) DriverManager.getConnection(url, username, password);
	    } catch (ClassNotFoundException e) {
	        e.printStackTrace();
	    } catch (SQLException e) {
	        e.printStackTrace();
	    }
	    return conn;
	}
	
	public int insert(Domian domian) {
	    Connection conn = getConn();
	    int i = 0;
	    String sql = "insert into sing (title,pice) values(?,?)";
	    PreparedStatement pstmt;
	    try {
	        pstmt = (PreparedStatement) conn.prepareStatement(sql);
	        pstmt.setString(1, domian.getTitle());
	        pstmt.setString(2, domian.getPice());

	        i = pstmt.executeUpdate();
	        pstmt.close();
	        conn.close();
	    } catch (SQLException e) {
	        e.printStackTrace();
	    }
	    return i;
	}
}

爬取得第一页

我获取列表的div下的所有内容

超简单的java爬虫

 

获得相应的xpath

 

超简单的java爬虫

 

观察列表,发现规律

超简单的java爬虫 超简单的java爬虫

找个要爬取得内容,依旧用xpath获得。

超简单的java爬虫

 

最后在数据查看爬取得数据

超简单的java爬虫

 

文件下载

广告也精彩
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的支付宝红包
  • 支付宝红包扫一扫打赏
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:2   其中:访客  1   博主  1

    • avatar 姜辰 3

      JAVA大佬