博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【网络爬虫】【java】微博爬虫(三):庖丁解牛——HTML结构分析与正则切分...
阅读量:5282 次
发布时间:2019-06-14

本文共 1640 字,大约阅读时间需要 5 分钟。

        在上一篇文章中已经通过请求的url地址把html页面爬取下来了,这里分别以网易微博的html和新浪微博的html为例来分析如何提取微博数据。

一、网易微博解析

        相比新浪微博的html结构,网易微博的比较容易明显地看出来,也容易找到微博数据。查看其html结构不是网页里右键→“查看网页源代码”,那里的微博正文是以html标签形式显示的,而程序实际请求返回得到的html的微博正文是以json格式,这个在控制台里输出看的很清楚。

        其实解析就是关键把要解析对应位置找到,总之对网易微博的解析是个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
getTweet(String htmlPath) throws IOException { File f = new File(htmlPath); FileReader fr = new FileReader(f); BufferedReader br = new BufferedReader(fr); Vector
tweets = new Vector
(); String html = ""; Pattern p = Pattern.compile("
.+?color:red.+?"); 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
realTweets = new Vector
(); for(int i=0; i
labels Pattern pdel = Pattern.compile("<.+?>"); Matcher mdel = pdel.matcher(tweetTemp); Vector
del = new Vector
(); while(mdel.find()) { if(!del.contains(mdel.group())) { del.add(mdel.group()); } } for(int j=0; j

原创文章,转载请注明出处:

转载于:https://www.cnblogs.com/DianaCody/p/5425650.html

你可能感兴趣的文章
牛客 545A 小A与最大子段和 & CF 660F Bear and Bowling 4
查看>>
eclipse 中java/scala 混合的maven项目 工作环境篇
查看>>
顺序栈与两栈共享空间-C语言实现
查看>>
【mongo】可以用localhost启动,无法用ip启动问题的解决
查看>>
【QT】视频播放
查看>>
HTML中使用javascript解除禁止input输入框代码:
查看>>
揭开Redis的神秘面纱
查看>>
Object流
查看>>
bzoj1293 [SCOI2009]生日礼物
查看>>
转 10 个 Nginx 的安全提示
查看>>
Windows Phone开发(8):关于导航的小技巧 转:http://blog.csdn.net/tcjiaan/article/details/7285062...
查看>>
React零碎知识点回顾
查看>>
字符串类型 字符串下标 字符串的方法 切片 for循环的一些总结
查看>>
记一次mysql的preparedStatement使用超限问题
查看>>
Ajax学习笔记1之第一个Ajax应用程序
查看>>
数据库查询问题小记
查看>>
validate插件:验证密码没有空格 用户名是5-10位 至少包含数字和大小写字母中的两种字符...
查看>>
echarts问题
查看>>
day 06 小数据池和编码
查看>>
node.js安装备忘录
查看>>