本文来自:fair-jm.iteye.com 转截请注明出处
额 就是想做个简单的实验的 内容不对的地方欢迎拍砖...
使用JSOUP就行 这里给出点思路
我只做了自己的首页和其他人的微博首页的抓取 其他的抓取没尝试(不好意思 比较懒...)
首先是利用JSOUP进行登陆 获取页面 看了下微博的登陆表格 发现用了ajax的方式 所以代码获取cookie有点难
所以偷了个懒就用IE的开发者工具获取到了cookie 获取到的cookie要写成map的形式 然后用代码:
Response res=Jsoup.connect("http://weibo.com").cookies(map).method(Method.POST).execute(); String s=res.body();
得到了下发现挺多的:
可以自己写段脚本来打印map.put(xxx,xxx)
我这里用scala写了段 用java写一样的 无所谓:
s.split("; ").foreach(s => {val x=s.split("=");println(s"""map.put("${x(0)}","${x(1)}");""")});
最后得到的body 嗯......是一大堆的script标签 最上面是微博的固定的顶上那一栏的内容(导航条的内容)
lz尝试了下 发现需要的是 <script>FM.view 中一个id为pl_content_homeFeed的 他就是首页的内容
然后lz进行了下简单的处理 没有用正则 因为....额...写不好:
String s=res.body(); //System.out.println(s); String[] ss=s.split("<script>FM.view"); int i=0; //pl_content_homeFeed // for(String x:ss){ // System.out.println(i++ + "======================================"); // System.out.println(x.substring(0, x.length()>100?100:x.length())); // System.out.println("==========================================="); // } String content=ss[8].split("\"html\":\"")[1].replaceAll("\\\\n", "").replaceAll("\\\\t", "").replaceAll("\\\\", ""); content=content.substring(0, content.length()<=13?content.length():content.length()-13); System.out.println(content);
输出的content就是首页显示的微博内容
不过这个输出的话unicode没有被转成中文字符 需要用native2ascii工具 去网上找到了一个:
http://soulshard.iteye.com/blog/346807
实测可以使用:
System.out.println(Native2AsciiUtils.ascii2Native(content));
注意了 以上的代码 lz是固定了主页的 所以在截取时直接用了index为8的
把post方法改成get方法 也可以获取到其他人的微博页
然后给出一个打印出获取的所有html内容的做法(试了一些主页可行):
package jsoupTest; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jsoup.Connection.Method; import org.jsoup.Connection.Response; import org.jsoup.Jsoup; public class JsoupTest { public static void main(String[] args) throws IOException { Map<String, String> map = new HashMap<>(); //map.put请根据自己的微博cookie得到 Response res = Jsoup.connect("http://weibo.com/u/别人的主页id") .cookies(map).method(Method.GET).execute(); String s = res.body(); System.out.println(s); String[] ss = s.split("<script>FM.view"); int i = 0; // pl_content_homeFeed // pl.content.homeFeed.index List<String> list = new ArrayList<>(); for (String x : ss) { // System.out.println(i++ + "======================================"); // System.out.println(x.substring(0, // x.length() > 200 ? 200 : x.length())); // System.out.println("==========================================="); if (x.contains("\"html\":\"")) { String value = getHtml(x); list.add(value); System.out.println(value); } } // content=ss[8].split("\"html\":\"")[1].replaceAll("(\\\\t|\\\\n)", // "").replaceAll("\\\\\"", "\"").replaceAll("\\\\/", "/"); // content=content.substring(0, // content.length()<=13?content.length():content.length()-13); // System.out.println(Native2AsciiUtils.ascii2Native(content)); } public static String getHtml(String s) { String content = s.split("\"html\":\"")[1] .replaceAll("(\\\\t|\\\\n|\\\\r)", "").replaceAll("\\\\\"", "\"") .replaceAll("\\\\/", "/"); content = content.substring(0, content.length() <= 13 ? content.length() : content.length() - 13); return Native2AsciiUtils.ascii2Native(content); } }
抓取的内容应该要适当格式化一下才可以用Jsoup做解析
不过试了下直接做解析也没什么问题(虽然有一些标签错误)
这只是个页面抓取的策略 其他的我不想多写了 大家自己实践一下 前提是你用自己的新浪微博的cookie进行抓取
相关推荐
Http,Jsoup-网页数据抓取,demo里介绍了对于广石化教务系统课程和成绩信息的抓取以及对茂名公交信息的抓取
JsoupAPI jsoup最新版帮助文档(1.10.2)
jsoupAPI中文版
利用jsoup抓取网站图片并下载,保存到本地文件夹。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
经过测试,可以抓取一个完整的网站,包括网站的图片、css、js等。同时根据网站目录,在本地生成相同目录。使用Jsoup+Java。下载之后,可以直接运行。
最新jsoup1.10.3和jsoupApi帮助文档
jsoup是java编写的html解析器,用于向web服务器发送请求返回的html页面,此文件包括jsoup的api文档和三份jsoup的教程文档。
使用jsoup异步抓取新闻数据装载listview(仿开源中国资讯列表.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
包含翻译后的API文档:jsoup-1.14.3-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.jsoup:jsoup:1.14.3; 标签:jsoup、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”...
htmlunit2.8 + jsoup1.7各种网站上的数据抓取。
此抓取是抓取新浪高尔夫频道的新闻,采用的是jsoup 选择器抓取,比起httpparse 更好,更高效的抓取。
Jsoup 1.6.3 API Chm格式
使用jsoup抓取网页列表信息,并入库,使用了PreparedStatement防止sql注入小demo。
jsoup.jar+jsoup中文API,需要的就下载吧
使用jsoup异步抓取新闻数据装载listview(仿开源中国资讯列表)
使用jsoup,抓取整个网站,保存在本地。包括网站的“css、js、图片、页面”,都会保存在本地。并且保存的路径痛网站上的路径。经过测试,一般的基础网站都可以抓取。
使用Jsoup抓取网页关键信息并入库 ip天气查询并发送邮件
jsoup1.8.1抓取爬虫工具jsoup1.8.1抓取爬虫工具jsoup1.8.1抓取爬虫工具
使用Jsoup解析html网页,包含jsoup.jar \ api.chm \ 代码
包含翻译后的API文档:jsoup-1.11.3-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.jsoup:jsoup:1.11.3; 标签:jsoup、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”...