`

使用JSoup进行新浪微博抓取(不用新浪的API)

 
阅读更多

本文来自: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进行抓取

 

 

  • 大小: 27.5 KB
0
1
分享到:
评论

相关推荐

    新浪微博粉丝抓取

    【标题】:“新浪微博粉丝抓取”这一主题涉及的是利用编程技术高效地获取新浪微博用户粉丝数据的过程。在互联网大数据时代,这种抓取技术对于社交媒体分析、市场研究和个人兴趣追踪都有重要作用。 【描述】:“多...

    最新新浪微博爬虫程序Java版 2015

    总结起来,这个"最新新浪微博爬虫程序Java版 2015"是使用Java和Jsoup库构建的一个初级但实用的网络爬虫,主要目的是从新浪微博抓取数据。对于想学习网络爬虫,特别是对Java和Jsoup感兴趣的开发者,这是一个有价值的...

    Java模拟登录新浪微博

    在本文中,我们将深入探讨如何使用Java来模拟登录新浪微博这一话题。模拟登录是网络爬虫或自动化测试中常见的技术,它允许程序以用户的身份与网站交互。对于Java开发者来说,理解这一过程对于构建自动化工具或者数据...

    java使用post登陆新浪微博并保存登陆后网页程序

    在Java编程环境中,使用POST方法登录新浪微博并保存登录后的网页是一项常见的任务,这涉及到网络请求、数据解析以及文件操作等多个技术领域。以下是一些相关的知识点: 1. **HTTP POST请求**:POST是HTTP协议中的一...

    SinaWeiboCrawler:新浪微博爬虫系统

    新浪微博作为中国最具影响力的社交网络之一,其用户活跃度高,信息更新频繁,因此对其进行数据抓取显得尤为关键。本文将深入探讨“SinaWeiboCrawler”这一基于Java实现的新浪微博爬虫系统,旨在揭示其工作原理、主要...

    基于Java的新浪微博爬虫研究与实现.zip

    在本项目"基于Java的新浪微博爬虫研究与实现"中,我们将探讨如何使用Java语言构建一个功能完善的微博数据抓取工具。爬虫是网络数据挖掘的重要手段,它能自动化地从互联网上搜集信息,对于社交媒体分析、市场研究、...

    WebCrawler:网页爬取新浪微博内容

    在这个项目中,我们将关注如何用Java编程语言构建一个能够从新浪微博抓取信息的爬虫。 【描述分析】 描述部分简短地重申了主题,即WebCrawler用于抓取微博内容。这暗示我们将深入学习如何通过网络爬虫技术获取社交...

    sina微博网络爬虫.rar

    描述中的"sina微博网络爬虫.rar"表明这是一个压缩文件,包含了实现抓取新浪微博数据的完整代码。RAR是一种常见的压缩文件格式,用于打包和压缩多个文件以便于存储和传输。用户需要解压此文件后查看和运行其中的代码...

    java获取网页工程

    本项目“java获取网页工程”着重展示了如何使用Java技术来抓取和处理网页数据,包括调用新浪微博的网络接口以及对StringBuffer类的简单应用。下面我们将深入探讨这两个核心知识点。 首先,让我们关注如何在Java中...

    JavaSpider:这个项目是一个爬虫项目,旨在实现对一些网站进行爬取和分析,以了解当下的社会发展与趋势

    - **微博抓取**:JavaSpider可能通过API接口或直接爬取网页抓取微博内容,包括用户、话题、热门微博等。 - **情感分析**:对抓取的微博文本进行情感分析,了解公众情绪变化。 - **话题热度追踪**:通过分析微博的...

Global site tag (gtag.js) - Google Analytics