最近要做一个关于自动从微博等短文本数据中判断人是否有自杀倾向的项目,在这之前需要先收集许多具有自杀倾向的人发的微博或短文本数据作为训练集。

其实这样的数据是挺难找的,尤其是对于我这种需求量比较大的项目。不过好在最后发现了突破口:“微博树洞”。“微博树洞”是指宣告了自杀行为的过世的人的微博,其留言区成为成千上万的抑郁症或是绝望的人的归属,在其下方发布许多负能量甚至是寻死的宣言。

比如走饭的微博:

1.找到微博评论数据接口

微博评论的数据接口有两种,一种是手机版、一种是PC版。手机版能爬到的数据仅仅只有十五页,因此我们从PC版入手,先来看看PC版的接口怎么找,长啥样儿。

首先,在当前微博的页面右键—检查(F12)打开开发者工具,然后按照下图的步骤进行操作(选择NetWork—选择XHR—随便点击另一个评论页—查看右侧新增的请求):

然后我们看新增的请求,你会发现在Preview中能看到格式化后的数据,而且里面有个html,仔细观察这个html你会发现这个就是评论列表的数据。我们仅需要将这个html解析出来即可。

再看看get请求的URL:

https://weibo.com/aj/v6/comment/big?ajwvr=6&id=3424883176420210&page=2&__rnd=1573219876141

ajwvr是一个固定值为6、id是指想要爬取评论的微博id、page是指第几页评论、_rnd是请求时的毫秒级时间戳。

不过微博是要求登录才能看更多评论的,因此我们需要先访问微博,拿到cookie的值才能开始爬。

2.编写爬虫

关注文章最下方的Python实用宝典,回复**微博评论爬虫**即可获得本项目的完整源代码。

设定四个参数:

    params = {'ajwvr': 6,'id': '3424883176420210','page': 1,'_rnd': int(round(time.time() * 1000))}

设定cookie:

headers = { 'X-Requested-With': 'XMLHttpRequest', 'Cookie': '你的微博cookie',
}

发送请求并解析数据

    URL = 'https://weibo.com/aj/v6/comment/big'for num in range(1,51,1):print(f'============== 正在爬取第 {num} 页 ====================')params['page'] = numparams['_rnd'] = int(round(time.time() * 1000))resp = requests.get(URL, params=params, headers=headers)resp = json.loads(resp.text)

解析这串HTML中我们所需要的数据,这里用到了XPATH,如果你还不了解XPATH,可以看这篇文章: 学爬虫利器XPath,看这一篇就够了

         if resp['code'] == '100000':html = resp['data']['html']html = etree.HTML(html)data = html.xpath('//div[@node-type="comment_list"]')for i in data:# 评论人昵称nick_name = i.xpath('.//div[@class="WB_text"]/a[1]/text()')# 评论内容text = i.xpath('.//div[@class="WB_text"]')text = [i.xpath('string(.)') for i in text]# 头像地址pic_url = i.xpath('.//div[@class="WB_face W_fl"]/a/img/@src')print(len(nick_name),len(text),len(pic_url))write_comment([i.strip() for i in text], pic_url, nick_name)

其中写入文件的函数和下载图片的函数如下:

 # 下载图片
def download_pic(url, nick_name):if not url:returnif not os.path.exists(pic_file_path):os.mkdir(pic_file_path)resp = requests.get(url)if resp.status_code == 200:with open(pic_file_path + f'/{nick_name}.jpg', 'wb') as f:f.write(resp.content)# 写入留言内容
def write_comment(comment, pic_url, nick_name):f = open('comment.txt', 'a', encoding='utf-8')for index, i in enumerate(comment):if ':' not in i and '回复' not in i and i != '':# 去除评论的评论w_comment = i.strip().replace(':', '').replace('n', '')# 写入评论f.write(w_comment.replace('等人', '').replace('图片评论', '')+'n')# 获得头像download_pic(pic_url[index], nick_name[index])

以上就是我们所用到的代码。在Python实用宝典公众号后台回复 微博评论爬虫 即可下载完整源代码(附手机版爬虫)。

3.定时爬虫

尽管如此,我们得到的数据还是不够,PC版的微博评论页面也仅仅支持爬到第五十页,第五十一页后就拿不到数据了,如图:

不过,走饭这个微博真的很多人回复,一天的数据就差不多50页了,我们可以通过每天定时爬50页来获取数据。linux系统可以使用crontab定时脚本实现,windows系统可以通过计划任务实现,这里讲讲crontab实现方法。

假设你的Python存放在/usr/bin/且将脚本命名为weibo.py 存放在home中,在终端输入crontab -e后,在最后面增加上这一条语句即可:

0 0 * * * /usr/bin/python /home/weibo.py

在公众号后台回复 微博评论爬虫 即可下载本文完整源代码(附手机版爬虫) 。

如果你喜欢今天的Python 教程,请持续关注Python实用宝典,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们会耐心解答的!

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

原文来自Python实用宝典:Python 爬取微博树洞

Python 爬取“微博树洞”详细教程相关推荐

  1. python爬取bilibili数据_如何使用Python爬取bilibili视频(详细教程)

    Python爬取bilibili视频 摘要 为了解决PC端的bilibili无法下载视频的问题,使用python语言可以实现一个能够爬取bilibili某个视频资源(不包括会员视频)的程序.采用整个视 ...

  2. python爬取微博热搜榜教程,python爬取微博热搜并存入表格

    微博热搜的爬取较为简单,我只是用了lxml和requests两个库 url= https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&am ...

  3. python爬取推特的详细教程_使用Selenium Python进行网页抓取[Twitter+Instagram]

    我正在尝试根据地理位置在Instagram和Twitter上进行网络抓取. 我可以运行一个查询搜索,但我在重新加载网页到more和存储字段到数据帧方面遇到了挑战.在 我确实找到了一些没有API密钥的w ...

  4. python爬取推特的详细教程_如何利用 Twitter 开放者平台爬取 Twitter 数据?

    泻药,Twitter是一个流行的社交网络,这里有大量的数据等着我们分析.Twitter R包是对twitter数据进行文本挖掘的好工具.本文是关于如何使用Twitter R包获取twitter数据并将 ...

  5. python3爬取微博评论教程_用python 爬取微博评论,怎么打开微博评论下的查看更多|...

    怎样用python爬新浪微博大V所有数据 先上结论,通过公开的api如爬到某大v的所有数据,需足以下两个条件: 1.在你的爬虫开始运行时,该大v的所有微博发布量没有超过回溯查询的上限,新浪是2000, ...

  6. python爬取微博用户信息(三)—— 创建MicroBlog类实例

    这一节,主要讲述 main.py文件,该文件创建了一个MicroBlog类,MicroBlog类中包含一些爬取微博内容的函数. 以及简单介绍traceback的用法. 感兴趣的小伙伴可以收藏哦! 另外 ...

  7. python爬取微博热搜榜

    python爬取微博热搜榜 最近应我大学室友得需求,做了一个简单的爬虫案例,先给大家看一下程序运行效果 接下来就是贴出代码了,在这里我会做一些简单说明,对如刚入门的同学可能会有所帮助,这里使用的是py ...

  8. python爬取微博热搜数据并保存!

    主要用到requests和bf4两个库将获得的信息保存在d://hotsearch.txt下importrequests;importbs4mylist=[]r=requests.get(ur- 很多 ...

  9. python爬取微博热门消息(一)——效果展示

    微博的热搜榜对于研究大众的流量有非常大的价值. 今天的教程就来说说如何爬取微博的热搜榜. 感兴趣的小伙伴可以 收藏 + 关注 哦! 另外,关于本项目的效果展示,以及教程,点击一下链接即可. pytho ...

  10. python爬取微博热门消息(三)—— 爬取微博热门信息的功能函数

    微博的热搜榜对于研究大众的流量有非常大的价值. 今天的教程就来说说如何爬取微博的热搜榜. 感兴趣的小伙伴可以 收藏 + 关注 哦! 另外,关于本项目的效果展示,以及教程,点击一下链接即可. pytho ...

最新文章

  1. Python学习入门基础教程(learning Python)--6.3 Python的list切片高级
  2. 多个if语句并列_P009 python基础之控制语句01
  3. 把时间当作朋友(四)
  4. iOS:ShareSDk的分享
  5. java执行Linux shell命令或者Window cmd命令
  6. linux优先级队列,Python3 线程优先级队列( Queue)
  7. 阿里云安装Quantaxis
  8. 搜狐被SEC列入“预摘牌名单”!回应:不打算提出异议
  9. jQuery 学习-样式篇(一):如何引用 jQuery
  10. /bin/sh: cc: 未找到命令
  11. loj 1308(点双连通分量应用)
  12. 需求分析与系统设计读书笔记之五
  13. 动软代码生成器使用心得
  14. FPGA的学习历程-入门篇
  15. iOS 封装Healthkit
  16. Matlab入门基础 note1——赋值与小数
  17. 【精品】机器学习模型可解释的重要及必要性
  18. Android 12系统源码_系统壁纸(一)系统壁纸的原理分析
  19. 人的计算与机器的计算
  20. 中国地区的手机号正则表达式

热门文章

  1. 记录一次帝国CMS模板被木马入侵后清理的过程,其他CMS类似【大佬勿喷】
  2. Keychain-Dumper的安装,签名与使用
  3. Android开发购买宠物装备
  4. 博士申请 | 浙江大学孙优贤院士课题组招收智能无人系统方向硕士生/博士生
  5. Leaflet制作专题图
  6. excel编程系列基础:认识VBA的编辑器VBE
  7. win7禁用驱动签名验证_如何在64位Windows 8或10上禁用驱动程序签名验证(以便可以安装未签名的驱动程序)...
  8. 芯片中的CP是什么CP
  9. 使用RDLC文件开发报表
  10. 玩转aws之(二)eks 设置efs(nfs)存储卷pvc