用 Java+JSOUP 解析网页

天台道人 发布于 2016/01/17 16:49
阅读 17
收藏 0

概述

根据开源工具JSOUP,为facebook/youtube/twitter三个网站中的6种页面编写解析工具,其他结构的页面不予考虑,输出为JSON,具体输出内容请看末尾说明。


这6种页面可分为所谓的列表页和帖子页,这是从解析需要角度去说的,举例如下,奇数为列表页,偶数为帖子页。奇数页只要解析所有具体帖子的URL,偶数页则要解析帖子内容,具体输出请参考末尾的JSON格式说明。

1 https://www.facebook.com/barackobama

2 https://www.facebook.com/barackobama/photos/a.53081056748.66806.6815841748/10153579378436749/

3 https://twitter.com/barackobama

4 https://twitter.com/BarackObama/status/685952871167320064

5 https://www.youtube.com/user/BarackObamadotcom/videos

6 https://www.youtube.com/watch?v=gNDE25a_OF8

如何取得自测所需html

请在chrome的查看网页源码功能中取得html,这些网页都是滚动加载的,请使用滚动加载后的网页源码,得到更好的测试输入。

调用方式

命令行方式交互,java parser.jar sample.html output.json,解析完成后程序退出,并输出到json

请对sample.html进行特征识别,知道是上述6种页面中的哪一种,然后决定使用哪种解析规则

测试交付

自测通过,程序健壮,比如特殊页面(空页面,其他结构的页面,帖子和评论个数很少或者很多)的异常处理。

清晰易维护的程序结构,优雅的代码风格,以及合理的注释,提交时附上必要的文档。

交付时间不超过4天


facebook列表页的输出内容(facebook里帖子url包含posts、videos、photos至少3种,下面列出了2种)

{ "Url": ["https://www.facebook.com/barackobama/photos/a.53081056748.66806.6815841748/10153583492091749/?type=3",

          "https://www.facebook.com/barackobama/posts/10153583034991749"] }

facebook帖子页的输出内容

{

"Facebook":{

"Account":"barackobama", //url最后那个独特的账号名

"PublishDateTime":"2016-1-10 12:00:00", //帖子发布时间

"Content":"Tomorrow night. 9 p.m. ET. Don't miss it." //帖子正文

"Link":"https://www.facebook.com/barackobama/photos/a.53081056748.66806.6815841748/10153583492091749/?type=3", //页面本身的url

"PicLink":[ "http://ofa.bo/c5N2" ], //帖子中嵌套图片的地址

"VideoLink":[ "https://www.facebook.com/fee5406d-a9a6-46ad-8d67-24d4a56b3fbe" ], //帖子中嵌套视频的地址

"IsForward":false, //是否是转发的

"Like":14120, //like数

"Comment":1221, //评论数

"Share":1977 //分享数

}

}

Youtube列表页的输出内容

{ "Url": ["https://www.youtube.com/watch?v=4_mvu35FrFg", "https://www.youtube.com/watch?v=HYT68Uii1dk"] }

Youtube帖子页的输出内容

{

"Youtube":{

"Account":"BarackObamadotcom",

"Subscription":5415, //订阅数

"PublishDateTime":"2016-1-7 12:34:35", //帖子发布时间,如果不能精确到秒,则填0, 形如"2016-1-7 00:00:00"

"Content":"Tomorrow night. 9 p.m. ET. Don't miss it.",

"Link":"www.youtube.com/user/BarackObamadotcom/videos",

"PlayTimes":568, //播放次数

"Comment":1147,

"Like":1000

}

}

twitter列表页的输出内容--所有twitter帖子的地址

{ "Url": ["https://twitter.com/BarackObama/status/686683647928172544", "https://twitter.com/WhiteHouse/status/686624886333112320"] }

twitter帖子页的输出内容

{

"Twitter":{

"Account":"barackobama",

"PublishDateTime":"2015-10-27 12:34:35",

"CrawlDateTime":"2015-10-27 15:34:35",

"Content":"Get ready for President Obama's final #SOTU",

"Link":"https://twitter.com/BarackObama/status/686683647928172544", //页面本身的url

"PicLink":[ "https://pbs.twimg.com/media/CYeXI4tUEAAHlwK.png" ],

"VideoLink":[ "https://t.co/uwE7JrpQyF" ],

"IsForward":false,

"Comment":1147, //twitter帖子的评论数貌似只能从html源码中“数”出来,所以请使用账号登陆twitter后滚到底部,然后取得源码进行测试,当然,你找到了简便的方法更好。

"Share":1568,

"Like":5628

}

}


加载中
0
Zero__One
Zero__One
为了解释写了这么多, 还不如花这么一个时间去把功能写出来。。。
0
y
yanzhuomin
还没完?
天台道人
天台道人
你好,即将结赏,请勿报名
返回顶部
顶部