package com.mieba;

 import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.processor.PageProcessor; public class SinaPageProcessor implements PageProcessor
{
public static final String URL_LIST = "http://blog\\.sina\\.com\\.cn/s/articlelist_1487828712_0_\\d+\\.html"; public static final String URL_POST = "http://blog\\.sina\\.com\\.cn/s/blog_\\w+\\.html"; private Site site = Site.me().setTimeOut(10000).setRetryTimes(3).setSleepTime(1000).setCharset("UTF-8").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");; @Override
public Site getSite()
{
// TODO Auto-generated method stub
return site;
} @Override
public void process(Page page)
{
// TODO Auto-generated method stub
// 列表页 if (page.getUrl().regex(URL_LIST).match())
{
// 从页面发现后续的url地址来抓取
page.addTargetRequests(page.getHtml().xpath("//div[@class=\"articleList\"]").links().regex(URL_POST).all()); page.addTargetRequests(page.getHtml().links().regex(URL_LIST).all()); // 文章页 } else
{
String title = new String();
String content = new String();
Article ar = new Article(title, content);
// 定义如何抽取页面信息,并保存下来
ar.setTitle(page.getHtml().xpath("//div[@class='articalTitle']/h2/text()").toString()); ar.setContent(
page.getHtml().xpath("//div[@id='articlebody']//div[@class='articalContent']/text()").toString());
System.out.println("title:"+ar.getTitle());
System.out.println(ar.getContent());
page.putField("repo", ar);
// page.putField("date", page.getHtml().xpath("//div[@id='articlebody']//span[@class='time SG_txtc']/text()").regex("\\((.*)\\)")); }
} }
 package com.mieba;

 import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Vector; import us.codecraft.webmagic.ResultItems;
import us.codecraft.webmagic.Task;
import us.codecraft.webmagic.pipeline.Pipeline; public class SinaPipeline implements Pipeline
{ @Override
public void process(ResultItems resultItems, Task arg1)
{
// TODO Auto-generated method stub
Article vo = resultItems.get("repo");
PrintWriter pw = null;
try
{
pw = new PrintWriter(new FileWriter("sina.txt", true)); pw.println(vo);
pw.flush(); }catch(FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e)
{
e.printStackTrace();
} finally
{
pw.close();
}
} }
 package com.mieba;

 public class Article
{
private String title;
private String content;
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title = title;
}
public String getContent()
{
return content;
}
public void setContent(String content)
{
this.content = content;
}
public Article(String title, String content)
{
super();
this.title = title;
this.content = content;
}
@Override
public String toString()
{
return "Article [title=" + title + ", content=" + content + "]";
} }
 package com.mieba;

 import us.codecraft.webmagic.Spider;

 public class Demo
{ public static void main(String[] args)
{ // 爬取开始
Spider
// 爬取过程
.create(new SinaPageProcessor())
// 爬取结果保存
.addPipeline(new SinaPipeline())
// 爬取的第一个页面
.addUrl("http://blog.sina.com.cn/s/articlelist_1487828712_0_1.html")
// 启用的线程数
.thread(5).run();
}
}

运行结果

爬取到的数据

总结:

关于简单的页面基本可以实现爬取,并且用对象进行存储数据,并最终保存为txt文档。

目前存在的问题,在于一些前端渲染的页面,还找不到url链接去完成相应的爬取,还需要进一步学习模拟登录页面,以获得隐藏的url等数据。

Java爬虫学习(3)之用对象保存新浪微博博文的更多相关文章

  1. Java爬虫一键爬取结果并保存为Excel

    Java爬虫一键爬取结果并保存为Excel 将爬取结果保存为一个Excel表格 官方没有给出导出Excel 的教程 这里我就发一个导出为Excel的教程 导包 因为个人爱好 我喜欢用Gradle所以这 ...

  2. Java 爬虫学习

    Java爬虫领域最强大的框架是JSoup:可直接解析具体的URL地址(即解析对应的HTML),提供了一套强大的API,包括可以通过DOM.CSS选择器,即类似jQuery方式来取出和操作数据.主要功能 ...

  3. 半途而废的Java爬虫学习经历

    最近在面试,发现Java爬虫对于小数据量数据的爬取的应用还是比较广,抽空周末学习一手,留下学习笔记 Java网络爬虫 简单介绍 爬虫我相信大家都应该知道什么,有什么用,主要的用途就是通过程序自动的去获 ...

  4. 《java JDK7 学习笔记》之对象封装

    1.构造函数实现对象初始化流程的封装.方法封装了操作对象的流程.java中还可以使用private封装对象私有数据成员.封装的目的主要就是隐藏对象细节,将对象当做黑箱子进行操作. 2.在java命名规 ...

  5. Java反射学习-5 - 反射复制对象

    通过反射方式复制对象: package cn.tx.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Fi ...

  6. Java爬虫学习(2)之用对象保存文件demo(1)

    package com.mieba.spider; import java.util.ArrayList; import java.util.List; import java.util.Vector ...

  7. java web学习总结(十) -------------------HttpServletRequest对象

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...

  8. java web学习总结(七) -------------------HttpServletResponse对象(一)

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要 ...

  9. java web 学习十(HttpServletRequest对象1)

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...

随机推荐

  1. Java设计模式(四)工厂方法模式

    定义与类型 定义:定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行. 类型:创建型 适用场景 创建对象需要大量重复的代码 客户端(应用层)不依赖于产 ...

  2. 【易懂】斜率DP

    前言 首先此篇文章是为低年级的朋友准备的,不涉及什么深奥的知识,比如线性规划之类的.仔细看,不要以为自己学不会,看不懂,只要你会DP并打过一些题目而且会单调队列优化DP,斜率DP离你就不远了---.这 ...

  3. win10c盘被下满文件解决办法

    今天更新系统,发现一个巨坑,好不容易软件配置的环境,开始以为是病毒,重装后在弄发现还是这个问题.经过两天的亲测解决办法: win7 svchost.exe占用内存和CPU很高,电脑很卡的解决方法:ht ...

  4. Java(一)环境的安装与配置

    一.JDK的安装 1.JDK与JRE的区别 Java开发环境,简称JDK(Java Development Kit),它是Java的核心,包括了Java编译器.Java运行环境.Java打包工具.Ja ...

  5. 0011 基于DRF框架开发(04 普通序列化器)

    普通序列化器和模型无关,只是对针对提交字段的定义. 本文定义三个序列化器: 教师序列化器,学生序列化器,教师学生序列化器.这三个序列化器都使用普通序列化器. 1 教师序列化器 在Application ...

  6. CF573E Bear and Bowling(6-1)

    题意 洛谷 做法一 考虑一种贪心(先别管对不对),设当前已选择的集合为\(A\),这是考虑该集合的补集,每个元素加进来后的增量为\(V_i\),则挑选最大的那个加入该集合 结论1:遵循上述贪心,\(\ ...

  7. sqlserver创建和删除外键约束

    x先找出约束名字然后删除它我给个例子 --测试环境--主表create table test1(id int primary key not null,value int)insert test1 s ...

  8. 04、extern引用全局变量

    这里强调一点就是关extern的声明: extern在声明中最主要的作用就是告诉编译器别的文件引用了全局变量XXXX. 举例: 有一个工程名字叫 Project1. Project1下面有两个.cpp ...

  9. 518-零钱兑换 II(完全背包-求方案总数)

    518-零钱兑换 II(完全背包-求方案总数) 给定不同面额的硬币和一个总金额.写出函数来计算可以凑成总金额的硬币组合数.假设每一种面额的硬币有无限个. 示例 1: 输入: amount = 5, c ...

  10. eclipse 项目的创建 编写 'Hello World'

    写项目之前确保 eclipse 安装完成 以及JDK 环境配置 成功 开始: 打开eclipse  右键file ->new->java project 如图: 然后输入项目名 点击Fin ...