使用JSOUP就行 这里给出点思路

我只做了自己的首页和其他人的微博首页的抓取 其他的抓取没尝试(不好意思 比较懒...)

首先是利用JSOUP进行登陆 获取页面 看了下微博的登陆表格 发现用了ajax的方式 所以代码获取cookie有点难

所以偷了个懒就用IE的开发者工具获取到了cookie 获取到的cookie要写成map的形式 然后用代码:

  1. Response res=Jsoup.connect("http://weibo.com").cookies(map).method(Method.POST).execute();
  2. String s=res.body();

得到了下发现挺多的:


 可以自己写段脚本来打印map.put(xxx,xxx)

我这里用scala写了段 用java写一样的 无所谓:

  1. 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进行了下简单的处理 没有用正则 因为....额...写不好:

  1. String s=res.body();
  2. //System.out.println(s);
  3. String[] ss=s.split("<script>FM.view");
  4. int i=0;
  5. //pl_content_homeFeed
  6. //        for(String x:ss){
  7. //          System.out.println(i++ + "======================================");
  8. //          System.out.println(x.substring(0, x.length()>100?100:x.length()));
  9. //          System.out.println("===========================================");
  10. //        }
  11. String content=ss[8].split("\"html\":\"")[1].replaceAll("\\\\n", "").replaceAll("\\\\t", "").replaceAll("\\\\", "");
  12. content=content.substring(0, content.length()<=13?content.length():content.length()-13);
  13. System.out.println(content);

输出的content就是首页显示的微博内容

不过这个输出的话unicode没有被转成中文字符 需要用native2ascii工具 去网上找到了一个:

http://soulshard.iteye.com/blog/346807

实测可以使用:

  1. System.out.println(Native2AsciiUtils.ascii2Native(content));

注意了 以上的代码 lz是固定了主页的 所以在截取时直接用了index为8的

把post方法改成get方法 也可以获取到其他人的微博页

然后给出一个打印出获取的所有html内容的做法(试了一些主页可行):

  1. package jsoupTest;
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import org.jsoup.Connection.Method;
  8. import org.jsoup.Connection.Response;
  9. import org.jsoup.Jsoup;
  10. public class JsoupTest {
  11. public static void main(String[] args) throws IOException {
  12. Map<String, String> map = new HashMap<>();
  13. //map.put请根据自己的微博cookie得到
  14. Response res = Jsoup.connect("http://weibo.com/u/别人的主页id")
  15. .cookies(map).method(Method.GET).execute();
  16. String s = res.body();
  17. System.out.println(s);
  18. String[] ss = s.split("<script>FM.view");
  19. int i = 0;
  20. // pl_content_homeFeed
  21. // pl.content.homeFeed.index
  22. List<String> list = new ArrayList<>();
  23. for (String x : ss) {
  24. //          System.out.println(i++ + "======================================");
  25. //          System.out.println(x.substring(0,
  26. //                  x.length() > 200 ? 200 : x.length()));
  27. //          System.out.println("===========================================");
  28. if (x.contains("\"html\":\"")) {
  29. String value = getHtml(x);
  30. list.add(value);
  31. System.out.println(value);
  32. }
  33. }
  34. // content=ss[8].split("\"html\":\"")[1].replaceAll("(\\\\t|\\\\n)",
  35. // "").replaceAll("\\\\\"", "\"").replaceAll("\\\\/", "/");
  36. // content=content.substring(0,
  37. // content.length()<=13?content.length():content.length()-13);
  38. // System.out.println(Native2AsciiUtils.ascii2Native(content));
  39. }
  40. public static String getHtml(String s) {
  41. String content = s.split("\"html\":\"")[1]
  42. .replaceAll("(\\\\t|\\\\n|\\\\r)", "").replaceAll("\\\\\"", "\"")
  43. .replaceAll("\\\\/", "/");
  44. content = content.substring(0,
  45. content.length() <= 13 ? content.length()
  46. : content.length() - 13);
  47. return Native2AsciiUtils.ascii2Native(content);
  48. }
  49. }

抓取的内容应该要适当格式化一下才可以用Jsoup做解析

不过试了下直接做解析也没什么问题(虽然有一些标签错误)

这只是个页面抓取的策略 其他的我不想多写了 大家自己实践一下 前提是你用自己的新浪微博的cookie进行抓取

爬取微博的数据时别人用的是FM.view方法传递html标签那么jsoup怎么解析呢的更多相关文章

  1. 【网络爬虫】【java】微博爬虫(一):小试牛刀——网易微博爬虫(自定义关键字爬取微博数据)(附软件源码)

    一.写在前面 (本专栏分为"java版微博爬虫"和"python版网络爬虫"两个项目,系列里所有文章将基于这两个项目讲解,项目完整源码已经整理到我的Github ...

  2. 【scrapy_redis】调试后爬取了部分数据,然后重新调试时,直接被去重机制过滤掉无法重头开始爬取

    这2天遇到一个问题,之前调试的时候爬取了一些数据,结果第二天重新调试的时候发现爬虫很快结束,而且还没有报错.后来从日志里看到这个: no more duplicates will be shown ( ...

  3. selenium跳过webdriver检测并爬取天猫商品数据

    目录 简介 编写思路 使用教程 演示图片 源代码 @(文章目录) 简介 现在爬取淘宝,天猫商品数据都是需要首先进行登录的.上一节我们已经完成了模拟登录淘宝的步骤,所以在此不详细讲如何模拟登录淘宝.把关 ...

  4. C#爬取微博文字、图片、视频(不使用Cookie)

    前两天在网上偶然看到一个大佬OmegaXYZ写的文章,Python爬取微博文字与图片(不使用Cookie) 于是就心血来潮,顺手撸一个C#版本的. 其实原理也很简单,现在网上大多数版本都需要Cooki ...

  5. python3爬取微博评论并存为xlsx

    python3爬取微博评论并存为xlsx**由于微博电脑端的网页版页面比较复杂,我们可以访问手机端的微博网站,网址为:https://m.weibo.cn/一.访问微博网站,找到热门推荐链接我们打开微 ...

  6. python爬虫25 | 爬取下来的数据怎么保存? CSV 了解一下

    大家好 我是小帅b 是一个练习时长两年半的练习生 喜欢 唱! 跳! rap! 篮球! 敲代码! 装逼! 不好意思 我又走错片场了 接下来的几篇文章 小帅b将告诉你 如何将你爬取到的数据保存下来 有文本 ...

  7. 利用Python爬取朋友圈数据,爬到你开始怀疑人生

    人生最难的事是自我认知,用Python爬取朋友圈数据,让我们重新审视自己,审视我们周围的圈子. 文:朱元禄(@数据分析-jacky) 哲学的两大问题:1.我是谁?2.我们从哪里来? 本文 jacky试 ...

  8. 【python数据挖掘】爬取豆瓣影评数据

    概述: 爬取豆瓣影评数据步骤: 1.获取网页请求 2.解析获取的网页 3.提速数据 4.保存文件 源代码: # 1.导入需要的库 import urllib.request from bs4 impo ...

  9. 吴裕雄--天生自然python数据清洗与数据可视化:MYSQL、MongoDB数据库连接与查询、爬取天猫连衣裙数据保存到MongoDB

    本博文使用的数据库是MySQL和MongoDB数据库.安装MySQL可以参照我的这篇博文:https://www.cnblogs.com/tszr/p/12112777.html 其中操作Mysql使 ...

随机推荐

  1. <asp:Button点击查询后,调用js中函数展现加载圈

    <div> <div id='paneloading' style='display:none;position:fixed;top:0px;left:0px;z-index:999 ...

  2. Unity3D无限奔跑者Playmaker v1.5

    这款功能丰富的移动准备包内含使您自己的各种各样的3D游戏运行的一切要素.无需编程! 功能 1 - 响应式滑动控制2 - 投掷炮弹3 - 可破坏物体4 - 能力提升道具- 金币磁铁- 护盾- 继续密钥- ...

  3. P3796 【模板】AC自动机(加强版)

    P3796 [模板]AC自动机(加强版) https://www.luogu.org/problemnew/show/P3796 题目描述 有NN个由小写字母组成的模式串以及一个文本串TT.每个模式串 ...

  4. Django的视图函数和路由系统中一些没有用过的小点

    1.request对象 print("返回用户访问的url,但是不包括域名",request.path_info) print("返回请求的方法,全大写",re ...

  5. Gradle 实战(1)—— 配置环境变量

    背景:Gradle 是一款构建工具,继 Ant .Maven 之后的现代构建工具,我会在接下来的博文中陆续介绍,我在工作中是如何使用 Gradle 的. 下载 Gradle 下面是 Gradle 的官 ...

  6. Java基本语法之动手动脑

    1.枚举类型 运行EnumTest.java 运行结果:false,false,true,SMALL,MEDIUM,LARGE 结论:枚举类型是引用类型,枚举不属于原始数据类型,它的每个具体值都引用一 ...

  7. ScrollView嵌套LinearLayout布局不能撑满全屏的问题

    当ScrollView里的元素想填满ScrollView时,使用"fill_parent"或者"match_parent"是不管用的,必需为ScrollView ...

  8. c代码片段-注解

    #include<stdio.h> /* * int ac 是命令行参数的个数 第一个参数是当前文件地址 * char * arg[] 字符指针的数组, 每一个指针指向一个具体的命令行参数 ...

  9. shell加密工具shc的安装和使用

    1) 工具说明 shell脚本是可读写的, 很有可能会泄露敏感信息, 如用户名/密码/路径/IP等. 同样在shell脚本运行时会也泄露敏感信息. shc是一个加密shell脚本的工具, 它的作用是把 ...

  10. vue2.0生命周期详解

    首先上图展 <template> <div id="home"> <p>{{ message }}</p> </div> ...