返回信息流悄悄更新一下,去年年底就写好了。这贴隔三差五被人顶一下,所以还是把我写好的那个方法过程和代码都跟大家分享交流一下吧。详见这里:
http://blog.csdn.net/codingmirai/article/details/17754645
欢迎交流。
——————————————————原帖分割线————————————————————————
项目需要。用java写的,lz虽然笨,但是百度一下写个爬虫还是不难的,我写的那个简单的方法是httpconnect+inputsteam获取网页html代码,然后用正则匹配的办法抽出网页文字。(没有优雅地解析html,别笑。。)但是!!!这个方法在爬微博句子的时候就行不通了。大概原因是微博搜索页面html源码中包含微博句子的节点是被json格式封装过的,而且要命的是!!!包含整个页面微博的那条json封装一行居然有八万多个字符。。。我原来以为是不是readLine()一次不能读这么多字符,后来网上查了查,java 中String的长度可以达到2^31-1,远远超过八万。。
忘了说抛出的异常了。。异常就是这货java.io.IOException: Premature EOF 应该是文件提前结束的意思。。。
后来google了一下,有哥们说是当一次性写的数据比较大的时候,写的速度超过了读的速度。。。所以会报这个错。。。
于是,我悲剧地又尝试了一下
while(xxx.ready()){}
结果,是没报错了。。。可是都程序却一直跑不到头了。。。这意味着那八万多字符的一行活活卡死了么??到底是为啥啊。。。好憔悴好无力啊。。。
报错是这个:
java.io.IOException: Premature EOF
at sun.net.www.http.ChunkedInputStream.readAheadBlocking(Unknown Source)
at sun.net.www.http.ChunkedInputStream.readAhead(Unknown Source)
at sun.net.www.http.ChunkedInputStream.read(Unknown Source)
at java.io.FilterInputStream.read(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at Spider.<init>(Spider.java:44)----------end------------
at Spider.main(Spider.java:63)
代码是这个。。求帮忙看看啊 T T。。。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class Spider {
private HttpURLConnection httpUrlConnection;
private InputStream inputStream;
private BufferedReader bufferedReader;
String url;
public Spider() throws MalformedURLException, IOException,
InterruptedException {
// url = "http://java.chinaitlab.com/net/890154.html";
// url = "http://www.baidu.com/";
url = "http://s.weibo.com/weibo/证监会&nodup=1";
httpUrlConnection = (HttpURLConnection) new URL(url).openConnection(); // 创建连接
System.out.println("---------start-----------");
/*
* Thread thread = new Thread(this); thread.start(); thread.join();
*/
try {
httpUrlConnection.setRequestMethod("GET");
httpUrlConnection.setUseCaches(true); // 使用缓存
httpUrlConnection.connect();// 建立连接
inputStream = httpUrlConnection.getInputStream(); // 读取输入流
bufferedReader = new BufferedReader(new InputStreamReader(
inputStream, "utf-8"));
String s;
File f = new File(
"C:/Users/lixueshan/Desktop/清华实验室/项目2-情感分析/项目过程/data/spider/zhengjianhui.html");
FileWriter fw = new FileWriter(f);
BufferedWriter bw = new BufferedWriter(fw);
while ((s = bufferedReader.readLine()) != null) {
while(bufferedReader.ready()){
System.out.println(s);
break;
// bw.write(s+"\r\n");
}
}
bw.close();
bufferedReader.close();
inputStream.close();
httpUrlConnection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("----------end------------");
}
public static void main(String[] args) throws MalformedURLException,
IOException, InterruptedException {
new Spider();
}
}
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #12022同步于 2013/12/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖
【关于微博爬虫】【已写好】有哪位大侠写过爬微博的代码么,求
hainanlxs
2013/12/2镜像同步55 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
暂时不想用api……想知道我那个方法问题在哪呢?一般网页都没问题,遇到微博就不行……
【 在 huangsy 的大作中提到: 】
: 这样不科学吧,试试新浪微博api?
嗯,但是我是想爬搜索页面……就是s.weibo.com底下的……
【 在 Emory 的大作中提到: 】
: 爬这个网站的。http://weibo.cn/duhaitao。 没有你说的jason的问题