爬取微博是爬虫新手入门项目,相对简单。但没想到还是遇到了些问题。。

0 踩点

老规矩第一步先踩点。某个用户的微博网址为:https://weibo.com/u/id,其中id是一长串数字,每个用户都有一个唯一的id对应。

打开网址后,右键-检查,切换到Network面板。往下滑,可以发现在微博加载出来的同时,Network也加载出来一些东西。推测这两者是有关系的。

在这个网址摸索一番之后没有任何收获,找不到有用的信息。

后来查阅资料发现,我打开的这个网址是PC端的,信息比较多,结构也比较复杂。一般来说,都是选择m端即mobile端也即手机端的页面进行爬取,虽然有时候信息会少一些,但是爬取难度低。

那要怎么打开m端页面呢?直接在PC端的网址前加个m.就行了!其实真正的m端网址是:https://m.weibo.cn/p/id2,但是加个m.就行了,会自动跳转到正确的m端网址去。id2和前面的PC端的id不一样,不过id2不重要,不需要研究他。

看起来就比PC端页面清爽多了啊...

接下来还是相同套路,右键-检查,切换到Network面板。往下滑,在加载出的文件中寻找可能有用的信息。耐心查找之后就可以发现:

这一堆数据就是和微博动态相关的,随便打开一个就看到了相关信息。当然要想知道具体和微博中的什么信息对应,还要经过细心比对。

但是任务依然没有完成,因为我们没有发现前后数据的关系。

containerid是固定的,但是since_id却没有规律,或者说我们没有发现这个参数的规律,那么我们就无法实现自动爬取。

卡在这里挺久的,去往上查了资料发现不久(可能就几个月)前,还有一个参数page来表示是第几页的动态。

page=1就得到第1页的动态,page=2就得到page第2页的动态。page这个参数显然比since_id好用得多。

经过测试,我发现page参数还是能用的。

但是我认为我并没有解决问题,因为我没有自己从微博网页发现page参数!所以我继续寻找。

1 继续寻找

经过很多次且很随意的测试,我发现了一个更简洁的页面。先点击主页,然后划到最下面,再点击查看全部微博。

跳转到另一个页面:

这个页面又比刚刚的页面少了很多花里胡哨的东西。所以呢,还是那个套路。。

这次就发现了page参数,发现了有规律的网址!

又经过多次测试,发现只有containerid和page这两个参数是有用的,其他参数不影响,可以删除!我们现在终于知道微博动态所在的网址了。

2 代码

现在就可以开始写代码了。

包导入和变量定义。

import requests
from pyquery import PyQuery as pq
from wordcloud import WordCloud
from PIL import Image
import jieba
import numpy as np
weibo_id = ''  # 微博用户id
base_url = 'https://m.weibo.cn/api/container/getIndex?containerid=230413' + weibo_id + '&page='
headers = {'Accept': 'application/json, text/plain, */*','MWeibo-Pwa': '1','Referer': 'https://m.weibo.cn/u/6132300208','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '+ 'Chrome/75.0.3770.100 Safari/537.36','X-Requested-With': 'XMLHttpRequest'
}
FILE_NAME = 'weibo.txt'  # 保存微博文本内容
IMG_PATH = 'love2.jpg'  # 词云的形状

获得json格式的数据。

def get_content(page_num):url = base_url + str(page_num)response = requests.get(url, headers=headers)if response.status_code == 200:  # 200表示正常,没被限制content_json = response.json()return content_jsonelse:return []  # 返回空列表

解析json,提取需要的文本内容。

def parse_json(content_json):text = ''if content_json:items = content_json.get('data').get('cards')for item in items:item = item.get('mblog')# 找到文本内容temp = pq(item.get('text')).text()pos = temp.find('/')# 把之前转发此微博的人发的文本内容去掉if pos != -1:temp = temp[:pos]text = text + temp# 找到转发的微博的文本内容# 如果此微博是本人发的,retweeted_status就不存在item = item.get('retweeted_status')if item:text = text + pq(item.get('text')).text() + 'n'
​return text

制作词云所需的函数。

def transform(text):word_list = jieba.cut(text)# 分词后在单独个体之间加上空格text = ' '.join(word_list)return text
​
​
def get_word_cloud():with open(FILE_NAME, 'r', encoding='utf-8') as f:img_matrix = Image.open(IMG_PATH)mask = np.array(img_matrix)wc = WordCloud(mask=mask, scale=4, font_path=r'C:WindowsFontssimhei.ttf', background_color='white',max_font_size=40, min_font_size=2)
​text = f.read()text = transform(text)wc.generate(text)wc.to_file(weibo_id + 'wc.png')

词云在之前的文章介绍过,这里不再重复说了。移步

爬虫|用Python小数据分析bilibili鬼畜巨头波澜哥(●◡●)_python_小z的笔记本-CSDN博客​blog.csdn.net

主函数。

if __name__ == '__main__':all_text = ''  # 保存所有的文本for page in range(1, 11): content_json = get_content(page)text = parse_json(content_json)all_text = all_text + text
​# 保存到文件with open(FILE_NAME, 'w', encoding='utf-8') as f:f.write(all_text)
​# 生成词云get_word_cloud()

3 结果

看一下结果吧。

所以这个人是什么状况看得一清二楚了。。可以分析的还有其他内容,比如分析时间,可以知道这个人在什么时间玩微博。

4 一点感想

很早就爬过微博了,本以为会是很简单的一次实践却遇到了困难。

靠自己解决了在网上找不到方法的问题。

第一次知道了还有m站这种东西。

新技能:爬取微博并制作词云get√

往期瞎写:

多目标进化算法在求解多值网络逻辑网络问题的应用!​mp.weixin.qq.com

在GitHub上大热的狗屁不通文章生成器是什么原理?​mp.weixin.qq.com

用Python小数据分析bilibili鬼畜巨头波澜哥(●'◡'●)​mp.weixin.qq.com

水平有限,如有错误,欢迎交流和批评指正!转载注明出处即可。

转自公众号「小z的笔记本」

每周更新各种内容

包括但不限于Python、爬虫、其他骚操作

欢迎关注

python怎么爬取知乎回答并制作词云_爬虫|爬取微博动态相关推荐

  1. python怎么爬取知乎回答并制作词云_使用python爬取流浪地球影评并制作词云,看看别人都说了些说什么...

    流浪地球影评爬取 大过年的,蹭个热度,看完电影后爬一下影评并作出词云. 本次影评取自豆瓣: https://movie.douban.com/subject/26266893/ 抓包 首先是拿到访问的 ...

  2. python怎么爬取知乎回答并制作词云_用Python分析了国庆“坑爹”景点......

    每次假期后网友总爱去微博.知乎吐槽国庆旅游的坑爹景点,相关话题也频上热榜,在国庆期间也有相关文章[1]通过整理对应话题统计出最坑爹城市前五名分别为杭州.西安.厦门.北京.南京,而最坑爹景点则有西湖.兵 ...

  3. python爬取爱情公寓电影评论并制作词云

    python爬取爱情公寓电影评论并制作词云 前言:     一直想研究研究如何生成词云,今天抽点时间给大家分享一下制作词云的过程,本文重在研究词云如何制作,由于时间仓促,至于爬取的数据量不大,大家可自 ...

  4. python爬取b站弹幕_爬取B站弹幕并且制作词云

    目录 SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠. 爬取弹幕 1. 从手机端口进入网页爬取找到接口 2.代码 import requests from ...

  5. 【Python3.6爬虫学习记录】(九)模拟登陆QQ空间爬取好友所有留言并制作词云

    前言:非常郁闷,写了第三遍了,无故404 学了五天了,熬夜搞出这份代码,虽然一度卡死几个小时,但结果是好的. 目录 第一部分 Selenium+Chrome爬取空间留言 1.1 使用说明 1.2 代码 ...

  6. 网易云词云python_Python3爬取网易云音乐评论制作词云!网易云评论人才辈出啊!...

    主要思路 利用Python爬取网易云音乐中相应歌曲的所有评论,并利用这些评论制作歌曲的专属词云. 具体过程见相关文件中的源代码. 开发工具 Python版本:3.5.4 相关模块: requests模 ...

  7. Python爬取《三国演义》并且制作词云

    前提废话 之前关注了一个python的公众号,每天都会推送文章,每次看都会看到他有使用wordcloud这个库来生成好看的词云,于是乎,我就学习了jieba分词和wordcloud词云. 这里给win ...

  8. 网络爬虫爬取某网数据并制作词云全过程【内附可执行代码注释完整】

    文章目录 前言 网络爬取数据部分 小知识点 利用正则表达式在字符串中提取到url(https以及http) 仅仅只保存字符串中的中文字符 爬取数据 生成词云 jieba分词 生成词云 生成词云最终版代 ...

  9. Python爆笑热播剧弹幕数据 制作词云分析

    人生苦短,我用python 这次因为版权问题,一张图片都放不上来 环境介绍 python 3.8 pycharm requests >>> pip install requests ...

最新文章

  1. Opengl-光照-基本光照-材质(有了材质一个物体才算是完整了)
  2. 网络:HTTP状态码
  3. 【算法】深度学习神经网络都调哪些参数?
  4. EJS学习(一)之特性、安装、工作原理
  5. linux命令:sosreport
  6. python until语句_详解Lua中repeat...until循环语句的使用方法
  7. php-v 查看不到版本,解決php -v查看到版本於phpinfo()打印的版本不一致問題
  8. linux 网络相关,Linux系统管理员必备的21个网络相关监控
  9. WIN7 远程桌面发生身份验证错误,要求的函数不受支持
  10. 12.12 静态文件不记录日志和过期时间
  11. org.springframework.stereotype
  12. httpd-2.4实现虚拟主机、访问控制及https功能
  13. Vanguard集团在美上市ETF资产超8700亿美元
  14. 方舟生存进化刷精英恐龙代码
  15. 使用RandomString设置随机经纬度-jmeter
  16. 三维点云数据处理软件供技术原理说明_三维点云数据获取方法及获取系统技术方案...
  17. 一、Geos库的安装和计算多边形是否相交
  18. 内容播放colorbox
  19. html语言设置图片位置,HTML中如何设置图片位置
  20. 炫龙银魂t1配置_炫龙银魂T1,不一样的外观一样的强悍

热门文章

  1. 超实用的shell脚本--一键获取进程所有信息
  2. elasticsearch 7.3使用x-pack kibana登录
  3. 使用内存硬盘(tmpfs)来加速你的网站
  4. Elasticsearch数据迁移工具elasticdump工具
  5. 【Python-3.3】遍历字典键值练习
  6. .NET Core控制台程序发布后没有exe解决方案
  7. 解决Surface Pro外接移动硬盘经常睡眠的问题
  8. Android Device Chooser中显示Target unknown解决方法
  9. service docker start后docker stop/waiting的解决方法
  10. RuntimeError: Python is not installed as a framework 错误解决方案