Java微博搜索关键字采集
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Random;
import java.util.concurrent.Callable; import org.apache.http.client.CookieStore;
import org.apache.log4j.Logger; import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.util.Cookie; public class SinaSearchCrawlerCommand implements Callable<Object> {
private static Logger logger = Logger.getLogger(SinaSearchCrawlerCommand.class);
private static String word="如家";
private static String cookiePath="E:\\学习\\微博爬虫\\cookie\\cookie.file";
private static String outputpath="E:\\学习\\微博爬虫\\";
//public Object call(){
public static void main(String[] args){
try {
word= java.net.URLEncoder.encode(word, "utf-8");
} catch (UnsupportedEncodingException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17);
webClient.getCookieManager().setCookiesEnabled(true);
for(int i=1;i<=100;i++){
System.out.println(cookiePathAppendRandom());
File file = new File(cookiePathAppendRandom());
if (file.exists()) {
FileInputStream fin = null;
try {
fin = new FileInputStream(file);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
CookieStore cookieStore = null;
ObjectInputStream in;
try {
in = new ObjectInputStream(fin);
cookieStore = (CookieStore) in.readObject();
in.close();
} catch (IOException e) {
logger.error(e);
} catch (ClassNotFoundException e) {
logger.error(e);
} List<org.apache.http.cookie.Cookie> l = cookieStore.getCookies();
for (org.apache.http.cookie.Cookie temp : l) {
Cookie cookie = new Cookie(temp.getDomain(), temp.getName(),
temp.getValue(), temp.getPath(), temp.getExpiryDate(),
false);
webClient.getCookieManager().addCookie(cookie);
}
/*HtmlPage page = null;
try {
page = webClient.getPage("http://weibo.cn/search/?tf=5_012");
} catch (FailingHttpStatusCodeException e) {
logger.error(e);
} catch (MalformedURLException e) {
logger.error(e);
} catch (IOException e) {
logger.error(e);
}
HtmlForm form = page.getForms().get(0);
HtmlSubmitInput button = form.getInputByName("smblog");
form.getInputByName("keyword").setValueAttribute(word);
logger.info("search:" + word);
try {
page = button.click();
} catch (IOException e1) {
logger.error(e1);
}*/ HtmlPage page = null;
try {
//logger.info("execution:"+this);
page = webClient.getPage("http://weibo.cn/search/mblog?hideSearchFrame=&keyword="+word+"&page="+i);
} catch (FailingHttpStatusCodeException e) {
logger.error(e);
} catch (MalformedURLException e) {
logger.error(e);
} catch (IOException e) {
logger.error(e);
} SimpleDateFormat dayformat = new SimpleDateFormat("yyyyMMdd");
long start = System.currentTimeMillis();
start = System.currentTimeMillis();
String path = null;
File file2 = null;
path = new String(outputpath + "/" + dayformat.format(start)
+ "/" + System.currentTimeMillis() + file.getName()+".html" );
file2 = new File(outputpath + "/" + dayformat.format(start));
if (!file2.exists())
file2.mkdirs();
file2 = new File(path);
System.out.println("当前页"+i+",采集至"+path);
if (file2.exists())
logger.warn("outfile exit!");
else {
FileOutputStream outputStream;
try {
outputStream = new FileOutputStream(file2);
outputStream.write(page.getWebResponse().getContentAsString().getBytes());
outputStream.close();
} catch (FileNotFoundException e) {
logger.error(e);
} catch (IOException e) {
logger.error(e);
}
}
webClient.closeAllWindows();
} else {
logger.warn("CookiePath doesn`t exit !!!");
} logger.info("execution:");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
logger.error(e);
return;
}
}
return; } private static String cookiePathAppendRandom() {
Random random = new Random();
return cookiePath+random.nextInt(7);
} public SinaSearchCrawlerCommand(String word, String cookiePath, String outputpath) {
if(word.contains("&")) {
word = word.replace("&", " ");
}
this.word = word;
this.cookiePath = cookiePath;
this.outputpath = outputpath;
} @Override
public String toString() {
return "SinaSearchCrawlerCommand [word=" + word + ", outputpath="
+ outputpath + "]";
} @Override
public Object call() throws Exception {
// TODO Auto-generated method stub
return null;
} }
Java微博搜索关键字采集的更多相关文章
- java使用itex读取pdf,并搜索关键字,为其盖章
导读:近期要做一个根据关键字定位pdf的盖章位置的相关需求,其中关键字可配置多个(包含pdf文档中可能不存在的关键字),当页面显示盖章完成时,打开pdf显示已经损坏. 排查后发现,当itext搜索的关 ...
- 仿百度壁纸客户端(五)——实现搜索动画GestureDetector手势识别,动态更新搜索关键字
仿百度壁纸客户端(五)--实现搜索动画GestureDetector手势识别,动态更新搜索关键字 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Frag ...
- 面试官:兄弟,说说Java的static关键字吧
读者乙在上一篇我去系列文章里留言说,"我盲猜下一篇标题是,'我去,你竟然不知道 static 关键字'".我只能说乙猜对了一半,像我这么有才华的博主,怎么可能被读者猜中了心思呢,必 ...
- Java中的关键字 transient
先解释下Java中的对象序列化 在讨论transient之前,有必要先搞清楚Java中序列化的含义: Java中对象的序列化指的是将对象转换成以字节序列的形式来表示,这些字节序列包含了对象的数据和信息 ...
- java中transient关键字的作用
Java有个特点就是序列化,简单地来说就是可以将这个类存储在物理空间(当然还是以文件的形式存在),那么当你从本地还原这个文件时,你可以将它转换为它本身.这可以极大地方便网络上的一些操作,但同时,因为涉 ...
- 【转】java中volatile关键字的含义
java中volatile关键字的含义 在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言 ...
- java的 new 关键字
java的new关键字想必大家都知道这是实例化一个对象.没错,也是为新对象分配内存空间. 比如new MyDate(22,7,1964)这样一个案例,他的完成需要四部: 一.为新对象分配内存空间,将M ...
- Java中native关键字
Java中native关键字 标签: Java 2016-08-17 11:44 54551人阅读 评论(0) 顶(23453) 收藏(33546) 今日在hibernate源代码中遇到了nati ...
- Java复习笔记--java中this 关键字
Java中this关键字,this可以调用类的成员变量和成员方法,this还可以调用类中的构造方法.使用这种方式值得注意的是, 只可以在无参构造方法中的第一句使用this关键字调用有参构造方法. pu ...
随机推荐
- Java数据结构——优先级队列
//================================================= // File Name : PriorityQueue_demo //------------ ...
- VS2013快捷键大全
Ctrl+E,D ----格式化全部代码 Ctrl+E,F ----格式化选中的代码 CTRL + SHIFT + B生成解决方案 CTRL + F7 生成编译 CTRL + O 打开文件 CTRL ...
- 安装docker管理工具rancher
http://blog.csdn.net/freewebsys/article/details/51136562 docker(2):安装docker管理工具rancher rancher是一个Doc ...
- NopCommerce源码分析ContainerBuilder builder.Update(container)
/// <summary> /// Register dependencies /// </summary> /// <param name="config&q ...
- JAVA 注解的几大作用及使用方法详解
JAVA 注解的几大作用及使用方法详解 (2013-01-22 15:13:04) 转载▼ 标签: java 注解 杂谈 分类: Java java 注解,从名字上看是注释,解释.但功能却不仅仅是注释 ...
- 负margin小记
static元素 margin-top/left负值,元素向指定方向移动, margin-bottom/right负值,元素不动,后续元素前移 float元素 左浮, ...
- XML模块
XML 例子: # -*- encoding:utf-8 -*- import requests from xml.etree import ElementTree as ET f = request ...
- github常见操作和常见错误!
本人总结: 1.问题: fatal: Not a git repository (or any of the parent directories) 解决: 本地库还没有创建,请先用git init ...
- 【转】跟我学Kafka之NIO通信机制
from:云栖社区 玛德,今天又被人打脸了,小看人,艹,确实,相对比起来,在某些方面差一点,,,,该好好捋捋了,强化下短板,规划下日程,,,引以为耻,铭记于心. 跟我学Kafka之NIO通信机制 ...
- Linux命令之dos2unix
Linux命令之dos2unix (2011-09-22 11:24:06) 转载▼ 标签: 杂谈 Linux命令之dos2unix - 将DOS格式文本文件转换成UNIX格式 用途说明 dos2 ...