使用WebMagic爬虫框架爬取暴走漫画
来源:互联网 发布:电脑网络显示感叹号 编辑:程序博客网 时间:2024/06/05 01:05
WebMagic是黄亿华先生开发的一款java轻量级爬虫框架。我之所以选择WebMagic,因为它非常轻量级,可以学习爬虫的原理,而且用WebMagic非常容易进行功能扩展。也许你会听过另一个爬虫框架,Heritrix。博主一开始也是先入手了Heritrix,但是后来发现Heritrix实在是不够轻量级,因为博主只是想自己做个爬虫玩玩,并且能对爬虫的原理有更深刻的认识,所以,博主后来就开始入手更轻量级的WebMagic。由于博主也是刚接触WebMagic,写博客也只是为了记录我的学习到的知识,文章如有纰漏,敬请指正。
一、首先我们看一下我们要 爬取的网页,这个demo中,我打算爬取暴走漫画的中的笑话,内容包括作者名称(author),笑话内容(xontent),上传日期(time)
二、定义一个实体类封装爬取内容
public class BaozouNews {// 作者private String author;// 提交时间private String time;// 内容private String content;getter and setter...}
三、WebMagic中最重要的组件就是PageProcessor,它决定了你抓取数据的逻辑。
1)确定要加入待爬取队列的超链接。
我们爬取起始位置为第一页,因此我们要将其他页码的超链接加入待爬队列
我们可以清晰看到页码的超链接存放在class为pager-content的div块中,因此可以如下将超链接加入队列中,css选择器详见css参考手册
page.addTargetRequests(page.getHtml().css("div.pager-content").links().all());
2)确定待爬取数据。
文章内容(content)是class为article article-text的div的data-text属性,因此其xpath为,关于xpath详见xpath教程
String content=page.getHtml().xpath("//div[@class='article article-text']/@data-text").toString()作者(author)是class为article-author-name的a的字符串部分
String author=page.getHtml().xpath("//a[@class='article-author-name']/text()").toString()依此类推
String time=page.getHtml().xpath("//span[@class='article-date']/text()").toString()
四、根据第三步的分析,写自己的PageProcessor
public class BaoZouProcessor implements PageProcessor {private Site site = Site.me().setRetryTimes(3).setSleepTime(100);@Overridepublic void process(Page page) {page.addTargetRequests(page.getHtml().css("div.pager-content").links().all());BaozouNews news = new BaozouNews();news.setAuthor(page.getHtml().xpath("//a[@class='article-author-name']/text()").toString());news.setContent(page.getHtml().xpath("//div[@class='article article-text']/@data-text").toString());news.setTime(page.getHtml().xpath("//span[@class='article-date']/text()").toString());page.putField("news", news);}@Overridepublic Site getSite() {return site;}}
五、编写自己的Pipeline,将爬取到的数据保存到数据库
public class BaoZouPipeLine implements Pipeline {@Overridepublic void process(ResultItems resultItems, Task task) {BaozouNews news = (BaozouNews) resultItems.get("news");Dao.insert(news);//将数据插入数据库}}
public class Dao {private static Connection getConn() {String driver = "com.mysql.jdbc.Driver";String url = "jdbc:mysql://localhost:3306/baozou";String username = "root";String password = "";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 static int insert(BaozouNews news) {Connection conn = getConn();int i = 0;String sql = "insert into baozou (author,time,content) values(?,?,?)";PreparedStatement pstmt;try {pstmt = (PreparedStatement) conn.prepareStatement(sql);pstmt.setString(1, news.getAuthor());pstmt.setString(2, news.getTime());pstmt.setString(3, news.getContent());i = pstmt.executeUpdate();pstmt.close();conn.close();} catch (SQLException e) {e.printStackTrace();}return i;}}
七、编写测试类
public class Test {public static void main(String[] args) {Spider.create(new BaoZouProcessor())// 从"http://baozoumanhua.com/text"开始抓.addUrl("http://baozoumanhua.com/text").addPipeline(new BaoZouPipeLine())// 开启5个线程抓取.thread(5)// 启动爬虫.run();}}
八、查看数据库结果,如图,成功地将网页上的数据保存到了数据库中
这只是一个简单的WebMagic爬虫的实例,但是还是可以学到很多东西。
2 0
- 使用WebMagic爬虫框架爬取暴走漫画
- 使用WebMagic爬虫框架爬取暴走漫画
- Java爬虫框架WebMagic的使用总结
- Java爬虫框架WebMagic的使用总结
- WebMagic 爬虫框架的入门使用
- Java爬虫框架WebMagic的使用总结
- WebMagic 爬虫框架学习
- java 爬虫框架 webmagic
- WebMagic爬虫框架学习
- webmagic爬虫使用
- 大数据采集:爬虫框架之WebMagic的基本使用
- 爬虫框架webmagic与spring boot的结合使用
- WebMagic Java爬虫框架初探
- 使用注解编写WebMagic爬虫
- java 爬虫 WebMagic-使用入门
- 使用WebMagic爬虫框架及javaEE SSH框架将数据保存到数据库(一)
- Java爬虫框架:WebMagic一(入门)
- webmagic爬虫框架源码研究----主线
- Android Service 详解一:概述
- Ubuntu 14.04安装服务器安装数据库MySQL
- 文本特征提取
- TP框架表单提交地址总是不正确
- Tab.js
- 使用WebMagic爬虫框架爬取暴走漫画
- 跟着SY速学Ubuntu系列五:Ubuntu 16 安装Composer
- @JoinTable和@JoinColumn
- 当你最穷的时候,这样做,不成百万富翁至少也是土豪!
- Android Service 详解二:创建一个service
- Interceptor验证session是否失效
- 同一个进程内open两次同一文件并读写
- mybatis反转自动生成dao、实体类和mapper.xml
- IOS多线程开发其实很简单