爬取微博用户数据

    • 前言
    • 查找的过程
    • 核心
    • 总结

前言

微博数据基本上可以说是社交圈里面最大的了。但是单纯的使用urllib,是不足以获取数据的。

今天来使用Cookie的方式绕开微博权限验证这一关卡, 爬取一下数据。

查找的过程

打开ChromeF12之后,刷新页面,真的是眼花缭乱的数据流啊,飞流直下。找了好久,发现大部分数据都是通过JavaScript脚本渲染到页面上的。

这也就是为什么单纯的使用urllib抓不到的原因了。因为这是动态页面,而Urllib则是抓取静态页面。明白了这一点,就找到了方向了。

那就是找到数据源接口。后来经过我的仔细审核,发现了类似于这样的一个URL。

http://weibo.com/p/aj/v6/mblog/mbloglist?ajwvr=6&domain=103505&is_search=0&visible=0&is_hot=1&is_tag=0&profile_ftype=1&page=2&pagebar=0&pl_name=Pl_Official_MyProfileFeed__23&id=1035051198367585&script_uri=/kqdpku&feed_type=0&pre_page=2&domain_op=103505&__rnd=1495367966928

然后发现服务器端返回的数据内容是JSON格式的。大致内容如下;

然后这姑且算是找到一个人的数据了吧。那么问题接着来了,如果我想看其他人的页面怎么办呢?

思路有如下两个:

  • 一是按照刚才的方法,一个个的去查找。(费时费力,不赞同)
  • 二是走捷径,对比URL,我们会发现一个domain的参数,而对应的值就是目标博主的ID。
    比如我要看刘强东的主页,http://weibo.com/p/1003061866402485/home?from=page_100306&mod=TAB&is_hot=1#place
    里面的from参数的page值后面的数据就是我们需要的domain值了。拿过来就可以直接使用。

核心

经过了刚才的各种铺垫,下面直接上代码。体验一把吧。

# coding: utf8

# @Author: 郭 璞
# @File: login.py
# @Time: 2017/5/21
# @Contact: 1064319632@qq.com
# @blog: http://blog.csdn.net/marksinoberg
# @Description: 新浪微博登录测试

import requests
import json
from bs4 import BeautifulSoup
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36',
    'Host': 'weibo.com'
}

Cookies = {
    "Cookie": "SCF=Asl3BNSxfmhmaP2cIVfnvOp-mmfHwOPYfdoMZIz6y4WtkH4xK0jdB0Hr0Tll4RzJ0xUHIi5HOLBAjEASrqSGDiQ.; SUB=_2A250JQA2DeThGeNI41UX8ifJyziIHXVXU3b-rDV8PUNbmtBeLWbGkW9yh-AUBKZFFYCHZ2zA0zH1I-l4dg..; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W5yNOfs44nTEDRpARDUs7Yl5JpX5K2hUgL.Fo-c1hMceo.fehB2dJLoIcBLxK-LBo5L12qLxK-LBo5L12qLxK-LBo5L12qLxK-LBo5L12qLxK-LBo5L12qpi--fi-z7iKysi--fi-z7iKysi--Ni-z0i-8si--Ni-zpi-z0i--fiKLFi-2Ei--fi-82iK.7; SUHB=0HTxO_F0SbtSsP; ALF=1526899685; SSOLoginState=1495363686; YF-V5-G0=8d4d030c65d0ecae1543b50b93b47f0c; _s_tentry=my.sina.com.cn; Apache=9206065364153.127.1495363942807; SINAGLOBAL=9206065364153.127.1495363942807; ULV=1495363942825:1:1:1:9206065364153.127.1495363942807:; YF-Page-G0=fc0a6021b784ae1aaff2d0aa4c9d1f17; YF-Ugrow-G0=ea90f703b7694b74b62d38420b5273df; wvr=6; wb_publish_fist100_5687629504=1; UOR=blog.csdn.net,widget.weibo.com,www.sina.com.cn"
}

# 刘强东
url = 'http://weibo.com/p/aj/v6/mblog/mbloglist?ajwvr=6&domain=103505&is_search=0&visible=0&is_hot=1&is_tag=0&profile_ftype=1&page=2&pagebar=0&pl_name=Pl_Official_MyProfileFeed__23&id=1035051198367585&script_uri=/kqdpku&feed_type=0&pre_page=1&domain_op=100306&__rnd=1495367966928'
response = requests.get(url=url, headers=headers, cookies=Cookies)

data = json.loads(response.text)

result = data['data']

soup = BeautifulSoup(result, 'html.parser')

blogs = soup.find_all('div', {'class': 'WB_detail'})
for blog in blogs[0:8]:
    print("微博发文:", blog.find_all('div')[2].get_text())
    # 为了减少控制台内容输出,这里注释掉即可
    # print("配图:", blog.find_all('div', {'class': 'media_box'}))
    print('======='*36)

# WB_innerwrap

运行结果如何呢?

C:\Users\biao\Desktop\network\env\Scripts\python.exe C:/Users/biao/Desktop/network/code/sina/login.py
微博发文:
                                                                                                    骗人,南通没有普洱!//@普洱玫瑰汤:啊哈,我也是南通人呢。
===========================================================
微博发文:
                                                                                                    回复@流氓无产者刘爷:即使那样死了,无耻的看客们还要说不过瘾哩。//@流氓无产者刘爷:不仅不应该收费,还应该累死饿死是不?还应该绑着炸弹跟恐怖分子对炸去是不?还应该拎着菜刀跟汉奸对砍去是不?说话之前掂量掂量自己,考虑考虑别人不行么?
===========================================================
微博发文:
                                                                                                    给队里多买点。
===========================================================
微博发文:
                                                                                                    聪明。//@遇见那兵荒马乱:还是那天红场阅兵那天您阅的未名湖吗?
===========================================================
微博发文:
                                                                                                    你这眼神啊!//@鐵匠--孫:上面怎么还有肉渣渣,还是馋嘴
===========================================================
微博发文:
                                                                                                    这哥俩才超过五百。
===========================================================
微博发文:
                                                                                                    顺也是一种孝,但不可机械教条。//@夜半有人私语时:以前只知道“以顺行孝”,原来也可以“以谏行孝”。谢谢孔老师。
===========================================================
微博发文:
                                                                                                    美梦与歹命。我回答了 @NEW七七 的问题,问题价值¥433.00,大家快来花1元围观~ O微博问答 ​​​​
===========================================================
Process finished with exit code 0

如此,微博数据也能搞到手了。

总结

使用Cookie绕开登录选项,确实是一个比较好的捷径。但是由于时效的问题,治标不治本。

从上面的结果也可以看出,这里简单的打印出了前几条数据内容。也算是抛砖引玉了。而且对比网页源码之后,我发现了更多好玩的数据源。图片,短视频,都会是很好的素材。

然后对XX进行文本分析,做成词云啊,或者做一下社交网络分析啊等等。

今天其实真的是太闲了,所以才搞了一下微博数据的爬取。文章内容,排版都挺失败的。(⊙﹏⊙)b

时间: 2024-10-23 17:17:21

爬取微博用户数据的相关文章

node爬取微博的数据的简单封装库nodeweibo使用指南_node.js

一.前言 就在去年12月份,有个想法是使用node爬取微博的数据,于是简单的封装了一个nodeweibo这个库.时隔一年,没有怎么维护,中途也就将函数形式改成了配置文件.以前做的一些其他的项目也下线了,为了是更加专注前端 & node.js.偶尔看到下载量一天超过60多,持续不断的有人在用这个库,但是看下载量很少也就没有更新.但是昨天,有人pull request这个分支了,提出一些中肯的建议和有用的代码.于是就认真回顾了下nodeweibo,发布了v2.0.3这个版本. 二.什么是nodewe

微博爬虫-求助。用python爬取微博用户的粉丝列表及粉丝的粉丝列表

问题描述 求助.用python爬取微博用户的粉丝列表及粉丝的粉丝列表 急需一份能爬取微博用户的粉丝列表及对应粉丝的粉丝列表搭建一个实验平台,由于自己编程能力太弱,所以希望好心人能给一份相应的python代码(其他语言编写的能运行的也可),在线等,急求! 解决方案 Python:获取新浪微博用户的收听列表和粉丝列表微博粉丝 解决方案二: python爬取糗百 模式不变 改一下正则就可以 也可以用sqllite保存 .正则自己网上看一下就回了 解决方案三: urllib请求页面获取response

文本挖掘-指定sina微博用户数据的爬取方法

问题描述 指定sina微博用户数据的爬取方法 我在做一个关于微博数据分析交通信息的应用,想获取特定用户(例如:哈尔滨交通广播) 的微博数据,希望给出爬取数据的教程,但是申请官方的key据说很慢,大家有什么比较有效的方法推荐? 解决方案 http://www.cnblogs.com/e241138/archive/2012/09/16/2687124.html 解决方案二: 用浏览器控件等,直接打开这个用户的weibo页面,然后抓取页面内容.

爬取微博数据遇到的问题

问题描述 现在已经能够进行模拟登陆了.为什么只能查看到一个公众人物的相关信息,诸如易中天.王文京.曾志勇等,却不能通过模拟登陆查看到诸如我的同事相关的信息呢?自己真的是想得太简单了,请解决了的.碰到了此问题的帮忙解答下 解决方案 解决方案二:你是通过开放平台爬取微博数据的么?解决方案三:不是,自个写的爬虫,硬爬,没有借助开放的api.解决方案四:引用2楼beijing20120926的回复: 不是,自个写的爬虫,硬爬,没有借助开放的api. 可以拿出来展示,大家研究下~~解决方案五:引用3楼s0

android 爬取手机端数据相关技术解答

问题描述 android 爬取手机端数据相关技术解答 想在公司让做一个android应用程序,就是装在手机端之后可以爬去qq群的聊天记录!小弟现在没有什么头绪!麻烦懂的各位大神提供一下思路! 万分感谢! 解决方案 读取QQ的目录,然后把QQ目录下面的相关文件(这个你要自己分析),也就是聊天记录文件(不排除是数据库),读取到自己的目录或者服务器上,在进行解析就可以了. 解决方案二: 手机上的QQ的聊天记录文件是什么格式,有没有加密?你清楚吗,不清楚这个事情就做不了. 解决方案三: 进入消息管理器,

求助大神,爬虫爬取京东评论数据爬一小部分(大概100条评论)就爬不到评论了,返回空值了

问题描述 求助大神,爬虫爬取京东评论数据爬一小部分(大概100条评论)就爬不到评论了,返回空值了 python 爬取评论数据,爬到一百多条评论,就返回空值了,无法继续爬下去了 解决方案 用fiddler调试下,看下是不是京东有限制.比如让你过多少时间再访问,或者要你输入验证码. 解决方案二: 如果要爬京东评论,已经有大牛写出很成熟的代码了,推荐大家去看看,专门讲了怎么突破京东的限制:http://blog.csdn.net/youmumzcs/article/details/51396283

url-python爬取LOL盒子数据,如何爬取审查元素?

问题描述 python爬取LOL盒子数据,如何爬取审查元素? 闲来无事,想爬取LOL战绩的队友ID,但是,用beautifulsoup不会抓取URL. 审查元素里面的内容,用urllib2无法抓取出来,正则表达式不太会.刚刚入门,希望得到指导,先谢谢大家了. 解决方案 Python爬取韩寒全部新浪博客 解决方案二: http直接通过url,然后学一下正则吧,很方便就能从页面中得到你想要的东西 解决方案三: urllib2中返回值中有对应数据的话 就是解析xml元素 或者正则字符串查找

简单爬取天眼查数据 附代码

一.常规抓包分析 比如要爬取企业注册信息查询_企业工商信息查询_企业信用信息查询平台_发现人与企业关系的平台-天眼查该页面的基础信息. 通过火狐浏览器抓包,可以发现,所要数据都在下图的json文件里 查看其请求 伪装成浏览器爬取该文件: 伪装成浏览器爬取该文件: import requests header = { 'Host': 'www.tianyancha.com', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) G

用HtmlUnit爬取淘宝数据

问题描述 http://jiuxu.taobao.com/比如我想爬取上面页面的所有宝贝链接如<ahref="http://item.taobao.com/item.htm?spm=a1z10.1.w5003-8452167994.1.fVp17O&id=40416742109&scene=taobao_shop"target="_blank"data-spm-wangpu-module-id="5003-8452167994&quo