用python爬取微博评论数据,爬虫之路,永无止境。。(附源码)
今天目标爬取微博任意博文的评论信息
工具使用
开发环境:win10、python3.6
开发工具:pycharm
工具包 :requests,re, time, random,tkinter

项目思路分析
1.网页版登录拿回cookie值
2.选取要爬的博文评论信息的网页版网址
https://weibo.com/3167104922/Kkl7ar83T#comment为例
3.根据网页版的地址抓包拿回博文唯一的id值(weibo_id)
4.构造博文手机版评论请求的地址
f’https://m.weibo.cn/comments/hotflow?id={weibo_id}&mid={weibo_id}&max_id_type=0’
5.发送请求拿回响应的json数据
6.max_id和max_id_type的值确定
7.构造data参数,下次翻页请求要加上参数

"""构造GET请求参数"""data = {'id': weibo_id,'mid': weibo_id,'max_id': max_id,'max_id_type': max_id_type}

8.max_id为上一个包的翻页规律
9.然后继续解析数据,获取评论信息内容,然后再翻页,一直回调。

起始地址先进行登录
https://weibo.com/
登录之后点开一篇博文,点击评论,点击查看更多评论
本文以https://weibo.com/3167104922/Kkl7ar83T#comment为例

search搜索weibo_id,构造headers里面的requests url,发送请求拿回weibo_id的值

进入手机版模式进行XHR抓包


翻页用到data的参数

"""构造GET请求参数"""data = {'id': weibo_id,'mid': weibo_id,'max_id': max_id,'max_id_type': max_id_type}

先来个代码操作
本代码需要准备手机版登录后的cookie和博文网页版地址

源码展示:


# !/usr/bin/nev python
# -*-coding:utf8-*-from datetime import datetime
from requests_html import HTMLSession
import re, time
import tkinter as tk
import urllib3                      # 解除警告
urllib3.disable_warnings()
session = HTMLSession()class WBSpider(object):def __init__(self):"""定义可视化窗口,并设置窗口和主题大小布局"""self.window = tk.Tk()self.window.title('微博评论信息采集')self.window.geometry('800x600')"""创建label_user按钮,与说明书"""self.label_user = tk.Label(self.window, text='请输入要爬取的微博评论的地址:', font=('Arial', 12), width=30, height=2)self.label_user.pack()"""创建label_user关联输入"""self.entry_user = tk.Entry(self.window, show=None, font=('Arial', 14))self.entry_user.pack(after=self.label_user)"""创建label_passwd按钮,与说明书"""self.label_passwd = tk.Label(self.window, text="请输入登陆后的cookie:", font=('Arial', 12), width=30, height=2)self.label_passwd.pack()"""创建label_passwd关联输入"""self.entry_passwd = tk.Entry(self.window, show=None, font=('Arial', 14))self.entry_passwd.pack(after=self.label_passwd)"""创建Text富文本框,用于按钮操作结果的展示"""self.text1 = tk.Text(self.window, font=('Arial', 12), width=85, height=22)self.text1.pack()"""定义按钮1,绑定触发事件方法"""self.button_1 = tk.Button(self.window, text='爬取', font=('Arial', 12), width=10, height=1,command=self.parse_hit_click_1)self.button_1.pack(before=self.text1)"""定义按钮2,绑定触发事件方法"""self.button_2 = tk.Button(self.window, text='清除', font=('Arial', 12), width=10, height=1,command=self.parse_hit_click_2)self.button_2.pack(anchor="e")def parse_hit_click_1(self):"""定义触发事件1,调用main函数"""user_url = self.entry_user.get()pass_wd = self.entry_passwd.get()self.main(user_url, pass_wd)def main(self, user_url, pass_wd):i = 1headers_1 = {'cookie': pass_wd,'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36'}headers_2 ={"referer": "https://m.weibo.cn/status/Kk9Ft0FIg?jumpfrom=weibocom",'cookie': pass_wd,'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Mobile Safari/537.36'}uid_1 = re.findall('/(.*?)#', user_url)[0]uid_2 = uid_1.split('/', 3)[3]# print(uid_2)url_1 = f'https://weibo.com/ajax/statuses/show?id={uid_2}'prox = ''response = session.get(url_1, proxies={'http': prox, 'https': prox}, headers=headers_1, verify=False).content.decode()# print(response)weibo_id = re.findall('"id":(.*?),"idstr"', response)[0]# print(weibo_id)# 构造起始地址start_url = f'https://m.weibo.cn/comments/hotflow?id={weibo_id}&mid={weibo_id}&max_id_type=0'"""2.发送请求,获取响应: 解析起始的url地址:return:"""prox = ''response = session.get(start_url, proxies={'http': prox, 'https': prox}, headers=headers_2, verify=False).json()"""提取翻页的max_id"""max_id = response['data']['max_id']"""提取翻页的max_id_type"""max_id_type = response['data']['max_id_type']"""构造GET请求参数"""data = {'id': weibo_id,'mid': weibo_id,'max_id': max_id,'max_id_type': max_id_type}"""解析评论内容"""self.parse_response_data(response, i)i+=1"""参数传递,方法回调"""self.parse_page_func(data, weibo_id, headers_2, i)def parse_page_func(self, data, weibo_id, headers_2, i):""":return:"""start_url = 'https://m.weibo.cn/comments/hotflow?'prox = ''response = session.get(start_url, proxies={'http': prox, 'https': prox}, headers=headers_2, params=data, verify=False).json()"""提取翻页的max_id"""max_id = response['data']['max_id']"""提取翻页的max_id_type"""max_id_type = response['data']['max_id_type']"""构造GET请求参数"""data = {'id': weibo_id,'mid': weibo_id,'max_id': max_id,'max_id_type': max_id_type}"""解析评论内容"""self.parse_response_data(response, i)i+=1"""递归回调"""self.parse_page_func(data, weibo_id, headers_2, i)def parse_response_data(self, response, i):"""从响应中提取评论内容:return:""""""提取出评论大列表"""data_list = response['data']['data']# print(data_list)for data_json_dict in data_list:# 提取评论内容try:texts_1 = data_json_dict['text']"""需要sub替换掉标签内容"""# 需要替换的内容,替换之后的内容,替换对象alts = ''.join(re.findall(r'alt=(.*?) ', texts_1))texts = re.sub("<span.*?</span>", alts, texts_1)# 点赞量like_counts = str(data_json_dict['like_count'])# 评论时间   格林威治时间---需要转化为北京时间created_at = data_json_dict['created_at']std_transfer = '%a %b %d %H:%M:%S %z %Y'std_create_times = str(datetime.strptime(created_at, std_transfer))# 性别  提取出来的是  fgender = data_json_dict['user']['gender']genders = '女' if gender == 'f' else '男'# 用户名screen_names = data_json_dict['user']['screen_name']print(screen_names, genders, std_create_times, texts, like_counts)print()except Exception as e:continueprint('*******************************************************************************************')print()print(f'*****第{i}页评论打印完成*****')def parse_hit_click_2(self):"""定义触发事件2,删除文本框中内容"""self.entry_user.delete(0, "end")self.entry_passwd.delete(0, "end")self.text1.delete("1.0", "end")def center(self):"""创建窗口居中函数方法"""ws = self.window.winfo_screenwidth()hs = self.window.winfo_screenheight()x = int((ws / 2) - (800 / 2))y = int((hs / 2) - (600 / 2))self.window.geometry('{}x{}+{}+{}'.format(800, 600, x, y))def run_loop(self):"""禁止修改窗体大小规格"""self.window.resizable(False, False)"""窗口居中"""self.center()"""窗口维持--持久化"""self.window.mainloop()if __name__ == '__main__':w = WBSpider()w.run_loop()

了解更多分析及数据抓取可查看:
http://cloud.yisurvey.com:9081/html/bd9fb365-ae11-4182-84d0-af28197bac71.html?ly=csdn
本文转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请联系我们删除处理。
特别说明:本文旨在技术交流,请勿将涉及的技术用于非法用途,否则一切后果自负。如果您觉得我们侵犯了您的合法权益,请联系我们予以处理

用python爬取微博评论数据,爬虫之路,永无止境。。(附源码)相关推荐

  1. python爬取微博评论数据的github链接_GitHub - 13633825898/weiboSpider: 新浪微博爬虫,用python爬取新浪微博数据...

    功能 爬取新浪微博信息,并写入csv/txt文件,文件名为目标用户id加".csv"和".txt"的形式,同时还会下载该微博原始图片(可选). 本程序需要设置用 ...

  2. python爬取微博评论数据的github链接_GitHub - guozifeng91/weiboSpider: 新浪微博爬虫,用python爬取新浪微博数据...

    功能 爬取新浪微博信息,并写入csv/txt文件,文件名为目标用户id加".csv"和".txt"的形式,同时还会下载该微博原始图片和微博视频(可选). 本程序 ...

  3. python爬取微博评论数据的github链接_GitHub - DABOLUO111/weiboSpider: 新浪微博爬虫,用python爬取新浪微博数据...

    功能 爬取新浪微博信息,并写入csv/txt文件,文件名为目标用户id加".csv"和".txt"的形式,同时还会下载该微博原始图片和微博视频(可选). 本程序 ...

  4. python爬取微博评论_python爬虫抓取新浪微博数据

    需求分析 微博主页 抓取的内容包括:微博发布的时间,正文(仅提取文字),转发数,评论数,点赞数 抓取的内容 数据是怎么加载的 新浪微博的数据是用ajax异步下拉加载的,在chrome的调试模式下可捕捉 ...

  5. 【Python爬虫实例学习篇】——5、【超详细记录】从爬取微博评论数据(免登陆)到生成词云

    [Python爬虫实例学习篇]--5.[超详细记录]从爬取微博评论数据(免登陆)到生成词云 个人博客地址:ht/tps://www.asyu17.cn/ 精彩部分提醒: (1)微博评论页详情链接为一个 ...

  6. python爬取微博评论(无重复数据)

    python爬取微博评论(无重复数据) 前言 一.整体思路 二.获取微博地址 1.获取ajax地址2.解析页面中的微博地址3.获取指定用户微博地址 三.获取主评论 四.获取子评论 1.解析子评论2.获 ...

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

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

  8. 看看你爱的他今天是什么‘颜色‘ -- Python爬取微博评论制作专属偶像词云

    简介:快来拿出你珍藏的pick star,用大家对他的爱重塑一个他吧.通过爬取微博评论,制作你的偶像图片词云,天天都是不重样的哦! 很多人学习python,不知道从何学起. 很多人学习python,掌 ...

  9. python爬取豆瓣读书top250并保存xls(含源码)

    python爬取豆瓣读书top250并保存xls(含源码) 又是霍霍豆瓣的一天O(∩_∩)O哈哈~. 目标网站:http://book.douban.com/top250/ 全军出击!!! 首先,按下 ...

  10. python爬取微博评论点赞数_python 爬虫 爬微博 分析 数据

    python 爬虫 爬微博分析 数据 最近刚看完爱情公寓5,里面的大力也太好看了吧... 打开成果的微博,小作文一样的微博看着也太爽了吧... 来 用python分析分析 狗哥这几年微博的干了些啥. ...

最新文章

  1. java 中 bean 的生命周期
  2. vs2010启动调试、停止调试非常慢
  3. 基于Forms-Roles认证方式目录权限配置的学习
  4. Linux chmod给文件加执行X权限
  5. 计算机硬盘中病毒以后怎么办,计算机中病毒,格式化整个硬盘后还有?怎么办?...
  6. 三年Java,真的卷不动了……
  7. AcWing 795. 前缀和
  8. Java并发——Synchronized关键字和锁升级,详细分析偏向锁和轻量级锁的升级
  9. 计算机中级培训感言,计算机中级培训培训感言
  10. js实现鼠标移动到div背景颜色变换,移开还原
  11. Python创建临时文件和文件夹
  12. 实现isPrime()函数,参数是整数,如果整数是质数, 返回True,否则返回False
  13. Ubuntu Linux 操作系统-清华大学开源软件镜像站下载
  14. 人体红外传感模块原理分析
  15. 题目0171-相同数字的积木游戏1
  16. OA的部门管理和员工管理模块的实现总结
  17. Js获取图片主色调,近似色,互补色,以及根据图片颜色获取主题配色方案详解、插件。
  18. matlab 图像中加入高斯白噪声,MATLAB——如何给图像添加高斯白噪声
  19. Apache Kafka教程A系列:简单生产者示例
  20. 人脸检测与识别:AlexNet人脸检测

热门文章

  1. 韦伯-费纳希定律,前景理论及其在数据科学中的应用
  2. matlab短均线滞后项,如何解决均线理论时间滞后性? 方法其实很简单!
  3. 15讲项目实战内页展示区收尾
  4. Microsoft VBScript 编译器错误 #x27;800a0408#x27; 无效字符 高手来来来,感激不尽
  5. php被挂马,PHP网站被挂马防御战
  6. JAVA合并两个PDF文件
  7. 常见的数字证书格式与格式转换
  8. idea 生成项目结构图
  9. 气体流量传感器在汽车电子上的应用
  10. 什么是SQL Server数据字典?