【网络爬虫】【java】微博爬虫(三):庖丁解牛——HTML结构分析与正则切分
来源:互联网 发布:彩妆怎么去个淘宝名字 编辑:程序博客网 时间:2024/06/14 00:15
在上一篇文章中已经通过请求的url地址把html页面爬取下来了,这里分别以网易微博的html和新浪微博的html为例来分析如何提取微博数据。
一、网易微博解析
相比新浪微博的html结构,网易微博的比较容易明显地看出来,也容易找到微博数据。查看其html结构不是网页里右键→“查看网页源代码”,那里的微博正文是以html标签形式显示的,而程序实际请求返回得到的html的微博正文是以json格式,这个在控制台里输出看的很清楚。
<script id=”data_searchTweet” type=”application/json”>…{ "searchTag":"", "list": [ { "id": "-6794651520897765848", "content": "#数码精选#【苹果称iPad屏幕进灰因中国空气差,你怎么看?】 近日,国内出现了一个由300名苹果用户组成的维权小组,控告苹果iPad、iMac等产品屏幕太容易进灰。如果你认为iPad屏幕易进灰是最让人郁闷的事,那就真是小巫见大巫了,苹果公司的回应简直让人泪奔,“中国空气质量太差,环境因素导致屏幕进灰”。http://163.fm/OOexvkh", "albumContent": "#数码精选#【苹果称iPad屏幕进灰因中国空气差,你怎么看?】 近日,国内出现了一个由300名苹果用户组成的维权小组,……
其实解析就是关键把要解析对应位置找到,总之对网易微博的解析是个json串解析,这里可以正则匹配回json,甚至可以直接用正则匹配相应字段,可以匹配userid、content、prettyTime等,最后写入到txt文件里。便于项目后期的处理,这里直接爬取微博正文content,其它像userid、prettyTime等直接在程序里用Vector<String>处理,这个在系列的第一篇文章里写的了,代码也给出了,此处不再赘述。
最后解析出来正文的txt形式的微博数据:(已用字符串替换的方式去除”content”字段名称,直接保留正文)
二、新浪微博解析
相比之下新浪的html就要复杂得多,这个在第一篇文章里谈到过,其微博不是以json格式展现而是以javascript形式,每条微博包含在<em>…</em>元素里。依据关键字标红快速定位:color:red。
首先把em元素及其中间的文本都匹配出来,匹配的正则表达式:<em>.+?color:red.+?</em>,然后再去掉所有<…>的标签得到utf8,最后用.parseInt(utf8CodeStr, 16)把所有utf8的十六进制换成char。
private Vector<String> getTweet(String htmlPath) throws IOException {File f = new File(htmlPath);FileReader fr = new FileReader(f);BufferedReader br = new BufferedReader(fr);Vector<String> tweets = new Vector<String>();String html = "";Pattern p = Pattern.compile("<em>.+?color:red.+?</em>");String tweetTemp = "";while(br.readLine() != null) {html += br.readLine();}br.close();Matcher m = p.matcher(html);while(m.find()) {tweetTemp = m.group();tweets.add(tweetTemp);}Vector<String> realTweets = new Vector<String>();for(int i=0; i<tweets.size(); i++) {//filt the <...> labelsPattern pdel = Pattern.compile("<.+?>");Matcher mdel = pdel.matcher(tweetTemp);Vector<String> del = new Vector<String>();while(mdel.find()) {if(!del.contains(mdel.group())) {del.add(mdel.group());}}for(int j=0; j<del.size(); j++) {tweetTemp = tweetTemp.replace(del.get(j), "");}StringBuilder sb = new StringBuilder();Pattern utf8p = Pattern.compile("\\\\u[0-9a-f]{4}"); //utf8 codeMatcher utf8m = utf8p.matcher(tweetTemp);String utf8codeStr;while(utf8m.find()) {utf8codeStr = utf8m.group().substring(2);sb.append((char)Integer.parseInt(utf8codeStr, 16));//parse to chinese}if(!realTweets.contains(sb.toString())) {//only save different tweetsrealTweets.add(sb.toString());}}return realTweets;}
原创文章,转载请注明出处:http://blog.csdn.net/dianacody/article/details/39716611
- 【网络爬虫】【java】微博爬虫(三):庖丁解牛——HTML结构分析与正则切分
- 网络爬虫--庖丁解牛,html的结构分析和正则切分
- 【网络爬虫】【java】微博爬虫(四):数据处理——jsoup工具解析html、dom4j读写xml
- 【网络爬虫】【java】微博爬虫(二):如何抓取HTML页面及HttpClient使用
- Linux企业级项目实践之网络爬虫(2)——网络爬虫的结构与工作流程
- Java——正则表达式_初识网络爬虫
- Python网络爬虫与信息提取(三) 正则表达式
- 网络爬虫源码分析(java实现)
- 【网络爬虫】【java】微博爬虫(一):小试牛刀——网易微博爬虫(自定义关键字爬取微博数据)(附软件源码)
- 网络爬虫原理与分析
- 爬虫学习笔记(三)——Re正则表达式
- Java网络爬虫--HTML DOM(HTML 基础)
- 网络爬虫系统Heritrix的结构分析
- 网络爬虫(三) Java实现简单的网络爬虫
- CSDN爬虫(三)——网络爬虫模拟登陆两种策略
- CSDN爬虫(三)——网络爬虫模拟登陆两种策略
- Python 网络爬虫与信息获取(一)—— requests 库的网络爬虫
- Linux企业级项目实践之网络爬虫(14)——使用正则表达式抽取HTML正文和URL
- C++头文件包含于前置声明
- Hadoop 2.5.0新特性和改进
- ASP.NET 页面之间的传值方式
- 随想录(提高代码质量的几个工具)
- windows内核开发环境的简易搭建
- 【网络爬虫】【java】微博爬虫(三):庖丁解牛——HTML结构分析与正则切分
- Java 虚拟机类加载机制
- 42 session
- 【网络爬虫】【java】微博爬虫(四):数据处理——jsoup工具解析html、dom4j读写xml
- Xtext是什么
- 网络解析html
- DIY台式机
- [Leetcode]Maximum Product Subarray
- java的加载与执行