前言

上篇文章介绍了如何获取Cookie并爬取微博评论,但评论千千万,我们可能只对点赞数高的评论感兴趣,也就是热门评论。但要想获取热门评论,用之前的方法得把评论爬个遍,然后按点赞数排序。这种做法一来费时,二来爬的不完整(除非把微博数据库全爬下来)。但微博后台已经帮我们给所有评论排了序,所以我们直接爬热门评论就好了。

获取Cookie

1、用浏览器进入手机版微博页面登陆微博,如进入https://m.weibo.cn/status/4173028302302955后登陆,再使用Chrome(其他浏览器也可以),Chrome是按F12打开开发者工具:

2、点击最上方一行的Network,找到左下的config,带⚙,应该很好找。点击,往下拉,可以看到当前访问的Request Head,其中有一个Cookie就是该账号登陆微博后的Cookie,这个待会儿会用到,如下图打码部分所示:

动态获取微博热门评论

首先,我们需要get评论内容的url,很简单,找到该微博页面的⚙hotflow(看不到就刷新一下),点开即可查看Request URL,如下图红框部分:

PS:不难发现url格式都类似,只是id不同。

然后在代码中设置url和headers:

#要爬取热评的起始url
url='https://m.weibo.cn/comments/hotflow?id=4281013208904762&mid=4281013208904762&max_id='
headers={'Cookie':'替换为你的Cookie','Referer': 'https://m.weibo.cn/detail/4281013208904762','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36','X-Requested-With': 'XMLHttpRequest'}

url和Referer中的id改成你想爬取网页的id即可。

这样可以爬下第一个热评,但我们想爬取更多热评就需要知道下一串热评的url。众所周知,手机上看热评需要不断下滑才能刷新,同理,我们下滑也可以加载到新的评论,新评论的⚙hotflow页面如下图所示:

可以发现新评论的url之前的url差距不大,但多了一个max_id=318050281200929。所以要想获得下一次的url,我们需要从某个地方得到这个max_id和max_id_type,但明显我们不能每次手动获取这个max_id和max_id_type,那从哪里可以得到这个值呢?

经我一哥们指点,在之前的返回的json文件的最后面有这个max_id和max_id_type。打开之前的⚙hotflow的preview,如下图所示:

然后我们看当前的⚙hotflow,如下图所示,果然有下一串热评的max_id和max_id_type:

所以我们只要不断更新这个max_id和max_id_type就可以实现热评的多次爬取:

maxpage = 1000
m_id = 0
id_type = 0
for page in range(0,maxpage):print(page)jsondata=get_page(m_id, id_type)write_csv(jsondata)results=parse_page(jsondata)time.sleep(1)m_id=results['max_id']id_type=results['max_id_type']

最后,我们实现一下爬取函数就可以啦~是不是很简单?

环境配置

操作系统 win10/64
语言 python2

结果

从左到右依次是:用户名,发表时间,点赞数,所在楼层,来源及评论内容,为了便于查看,我们可以使用BeautifulSoup的get_text()让它变得更clearn:

结论

可以看到,有一条热评出现在第2441楼,如果我们爬取所有评论再排序可能要爬2000多条,才能爬完整前50条,而第64条出现在53284楼,所以学会爬热评是分析微博评论必不可少的。

100多条之后就没按点赞数来排序了,可能和微博后台的排序算法有关系。如果你不想爬太多设置一下maxpage就好了。

未来工作

如果能获取某些人或某类微博的id列表,或许可以挖到一些有意思的东西。

附完整代码及Github链接:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-#爬取某条微博热评并存为csv文件import requests
import time
import os
import csv
import codecs
import sys
import json
from bs4 import BeautifulSoup
reload(sys)
sys.setdefaultencoding('utf8')#要爬取热评的起始url
url='https://m.weibo.cn/comments/hotflow?id=4312409864846621&mid=4312409864846621&max_id='
headers={'Cookie':'Your Cookie','Referer': 'https://m.weibo.cn/detail/4312409864846621','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36','X-Requested-With': 'XMLHttpRequest'}#存为csv
path = os.getcwd()+"/weibo.csv"
csvfile = open(path, 'wb')
csvfile.write(codecs.BOM_UTF8)
writer = csv.writer(csvfile)
#First Row
writer.writerow(('Usename', 'Time', 'Like_count','Floor_number','Sourse', 'Comments'))def get_page(max_id, id_type):
#参数params={'max_id':max_id,'max_id_type': id_type}try:r=requests.get(url, params=params, headers=headers)if r.status_code==200:return r.json()except requests.ConnectionError as e:print('error',e.args)def parse_page(jsondata):if jsondata:items=jsondata.get('data')item_max_id={}item_max_id['max_id']=items['max_id']item_max_id['max_id_type']=items['max_id_type']return item_max_iddef write_csv(jsondata):datas = jsondata.get('data').get('data')for data in datas:created_at = data.get("created_at")like_count = data.get("like_count")source = data.get("source")floor_number = data.get("floor_number")username = data.get("user").get("screen_name")comment = data.get("text")comment = BeautifulSoup(comment,'lxml').get_text()#print jsondata.dumps(comment, encoding="UTF-8", ensure_ascii=False)writer.writerow((username, created_at, like_count, floor_number, source,json.dumps(comment, encoding="UTF-8", ensure_ascii=False)))maxpage = 1000
m_id = 0
id_type = 0
for page in range(0,maxpage):print(page)jsondata=get_page(m_id, id_type)write_csv(jsondata)results=parse_page(jsondata)time.sleep(1)m_id=results['max_id']id_type=results['max_id_type']

自动爬取微博热门评论和点赞数并存为EXCEL文件(python2)相关推荐

  1. 用八爪鱼爬取微博热门评论

    关于八爪鱼 八爪鱼, 是一款简单易操作的爬虫工具.当然这种工具也有一定的局限性,可定制性肯定没有用一些爬虫框架(scrapy等)好(毕竟代码是自己写的,哈哈). 使用八爪鱼 最近,使用八爪鱼爬取了一些 ...

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

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

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

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

  4. python爬虫入门练习:BeautifulSoup爬取猫眼电影TOP100排行榜,pandas保存本地excel文件

    传送门:[python爬虫入门练习]正则表达式爬取猫眼电影TOP100排行榜,openpyxl保存本地excel文件 对于上文使用的正则表达式匹配网页内容,的确是有些许麻烦,替换出现任何的差错都会导致 ...

  5. Python爬取微博的评论人的微博网址

    这次爬取微博以手机客户端为主.打开手机客户端的微博链接为 https://m.weibo.cn 进入微博后,随机找到评论多的为例.比如搜索鹿晗.爬取评论鹿晗的评论人的微博网址 打开F12控制台,点击网 ...

  6. 备忘5:爬取微博热门信息以及所有热门微博评论的用户信息

    import requests import os import re import csv import time import json#headers是请求加上头信息,伪装成浏览器访问,不然会被 ...

  7. 自动获取cookie,爬取新浪微博热门评论

    目录 一.前言 二.代码 一.前言 前几天突然想爬一爬微博的热门评论玩,就间断地挤出来了一点时间写了一个简略版. 最大的难点是新浪的访客机制,导致无法直接用requests爬取,需要先在cookie上 ...

  8. 备忘4:爬取微博热门信息以及所有热门微博转发的用户信息

    import requests import os import re import csv import time import json#headers是请求加上头信息,伪装成浏览器访问,不然会被 ...

  9. 网络爬虫-爬取微博热门话题前15个

    用java+webdriver+testng实现获取微博热门话题前15个,包括话题排名.标题.阅读量.内容,写入txt文件功能 前提条件: 已安装好java环境,工程导入了webdriver的jar包 ...

最新文章

  1. Linux配置免密登录
  2. 汽车开放系统架构(AUTOSAR)简介
  3. 给微软的日志框架写一个基于委托的日志提供者
  4. 多年前的树莓派 B+ 重新工作
  5. 关于bash的shellshock漏洞
  6. 干货||Selenium自动化测试网页
  7. 腾讯云安全:移动 APP 安全行业报告
  8. tensorflow学习笔记(1)如何高效地学习TensorFlow(附链接)
  9. 汇编语言王爽实验十三
  10. 漫步微积分三十七——力和功
  11. (实用)网页在线QQ客服咨询html代码
  12. 波士顿动力Spot mini,MIT 猎豹、宇树科技、蔚蓝四足机器人类别
  13. 解决使用Glide加载图片背景出现浅绿色
  14. 任正非、董明珠、曹德旺,中国实业三大网红!他们有个共同点:坚决不做一件事!
  15. Java版Quest Soft Player
  16. C++ 获取个位数十位数等
  17. 安徽计算机在职研究生学校,安徽在职研究生可以考哪几个学校
  18. K8S 中 Pod 的5种阶段/状态
  19. 使用qt实现多线程编程
  20. 解决因蓝牙驱动版本问题无法升win10问题 (附 WIN7升级WIN10超详细步骤 及 升级后个别问题软件处理方法)

热门文章

  1. 【蓝桥杯】特别数的和
  2. 鸡兔同笼之Python函数
  3. 2022年京东平台休闲食品的年度总销量超6亿件,同比增长6.5%
  4. 使用PS快速制作App logo图
  5. “第三只眼”修炼手册
  6. app开发外包公司一般报价多少钱?
  7. iPhone软件开发前需认真考虑问题
  8. 【Axure】Axure RP制作日期控件
  9. 1677. 【USACO】山峰暸望
  10. 激活 visio Premium 2010 vol 版本