python爬取微博博主历史博文存入Excel
一、环境以及微博接口
环境:python3
微博接口:由于电脑端的反爬措施过于严密,所以我就选择绕过电脑端的直接选择手机端的接口。接口查找步骤如下:
1、使用谷歌浏览器进入微博,搜索想要爬取的微博博主:
然后点击进入微博主页。
2、按F12,点击响应式设计模式(就是模拟手机模式)
选择xhr,然后按F5刷新,就会出现很多的接口。选择如下图这个接口:
选择带小齿轮和具有since_id特征的那个。因为since_id后面翻页需要用到。
这样微博接口就拿到了。
二、代码实现:
import requests
import json
import jsonpath
from pyquery import PyQuery as pq
import xlwt
import time
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0'
}
#定义开始时间
time_end = 1590940800.0
#定义结束时间
time_start = 1577808000.0
#定义控制条件
bool_s = 1
work_book=xlwt.Workbook(encoding='utf-8')
sheet=work_book.add_sheet('sheet1')
y = 0
arr_list = ["博主","简介","关注数","粉丝数","总发帖数","发布时间","标注","点赞数","转发数","评论数","是否源于转发","博文"]
sheet.write(y,0,arr_list[0])
sheet.write(y,1,arr_list[1])
sheet.write(y,2,arr_list[2])
sheet.write(y,3,arr_list[3])
sheet.write(y,4,arr_list[4])
sheet.write(y,5,arr_list[5])
sheet.write(y,6,arr_list[6])
sheet.write(y,7,arr_list[7])
sheet.write(y,8,arr_list[8])
sheet.write(y,9,arr_list[9])
sheet.write(y,10,arr_list[10])
sheet.write(y,11,arr_list[11])
#4456718664899043
since_id = ''
s_id = '&since_id='
url = input("请输入网址:")
y = y + 1
while bool_s > 0:#url = 'https://m.weibo.cn/api/container/getIndex?type=uid&value=3598339130&containerid=1076033598339130&since_id='url_id = url +s_id+ str(since_id)print("网址一:",url_id)if since_id is False:bool_s = -1response = requests.get(url_id,headers=headers)response.encoding = 'UTF-8'json_data = json.loads(response.text)#博主名称json_url_name = '$.data.user.screen_name'#简介json_url_verified_reason = '$.data.user.verified_reason'#关注数json_url_follow = '$..follow_count'#粉丝数json_url_followers = '$..followers_count'#总发帖数json_url_total = '$..statuses_count'#发布时间json_url_time = '$.data.created_at'#点赞数json_url_attitudes = '$.data.attitudes_count'#转发数json_url_reposts = '$.data.reposts_count'#评论数json_url_comments = '$.data.comments_count'#获取页码since_idjson_url_sign = '$..since_id'# 博文keyjson_url_key = '$..mblog.bid'#获取类型json_url_type = '$.data.pic_num'#类型二次定位json_url_type2 = '$.data.page_info'#获取时间json_url_time_two = '$..created_at'#longText路径json_url_longText = '$.data.retweeted_status'data_url_key = jsonpath.jsonpath(json_data,json_url_key)since = jsonpath.jsonpath(json_data, json_url_sign)try:if since is False:bool_s = -1else:since_id = since[0]except Exception as e:print("sinceid出错",e)if data_url_key is False:bool_s = -1breakfor i in range(0,len(data_url_key)):url_two = 'https://m.weibo.cn/statuses/show?id='+str(data_url_key[i])+'&display=0&retcode=6102'print(url_two)passage_response = requests.get(url_two,headers=headers)passage_response.encoding = 'UTF-8'try:json_passage = json.loads(passage_response.text)except Exception as e:print("二层读取博文报错",e)#获取文本json_url_text = '$.data.text'data_date = jsonpath.jsonpath(json_passage,json_url_time_two)#写如博主名称data_name = jsonpath.jsonpath(json_passage,json_url_name)print(data_name)sheet.write(y,0,data_name)#写入简介data_reason = jsonpath.jsonpath(json_passage,json_url_verified_reason)sheet.write(y,1,data_reason)#写入关注数data_follow = jsonpath.jsonpath(json_passage,json_url_follow)sheet.write(y,2,data_follow[0])#写入粉丝数data_followers = jsonpath.jsonpath(json_passage,json_url_followers)sheet.write(y,3,data_followers[0])#写入总发帖数data_total = jsonpath.jsonpath(json_passage,json_url_total)sheet.write(y,4,data_total[0])#写入发布时间data_create_time = jsonpath.jsonpath(json_passage,json_url_time)times = time.mktime(time.strptime(data_date[0][0:20] + data_date[0][26:30], "%a %b %d %H:%M:%S %Y"))timeArray = time.localtime(times)otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)print(otherStyleTime)sheet.write(y,5,otherStyleTime)#写入标标注data_type = jsonpath.jsonpath(json_passage,json_url_type)if int(data_type[0]) > 0:sheet.write(y,6,"图片")else:data_info = jsonpath.jsonpath(json_passage,json_url_type2)if data_info is False:sheet.write(y,6,"文字")else:sheet.write(y,6,"视频")# sheet.write(y,6,data_type[0])#写入点赞数data_a = jsonpath.jsonpath(json_passage,json_url_attitudes)sheet.write(y,7,data_a[0])#写入转发数data_re = jsonpath.jsonpath(json_passage,json_url_reposts)sheet.write(y,8,data_re[0])#写入评论数data_com = jsonpath.jsonpath(json_passage,json_url_comments)sheet.write(y,9,data_com[0])#写入是否源于转发data_status = jsonpath.jsonpath(json_passage,json_url_longText)if data_status is False:sheet.write(y,10,"否")else:sheet.write(y,10,"是")#写入博文data_text = jsonpath.jsonpath(json_passage,json_url_text)try:data_text_ex = pq(data_text[0]).text()sheet.write(y,11,data_text_ex)except Exception as e:print("写入错误",e)y = y + 1#每隔一秒爬取一小页time.sleep(1)print(time.mktime(time.strptime(data_date[0][0:20] + data_date[0][25:30], "%a %b %d %H:%M:%S %Y")),data_date[0][0:20] + data_date[0][26:30])#判断截止时间,可以自己设置截止时间if time.mktime(time.strptime(data_date[0][0:20] + data_date[0][26:30], "%a %b %d %H:%M:%S %Y")) < time_end:bool_s = -1breakprint("第{}行爬取完成".format(y))time.sleep(3)
work_book.save('{}.xls'.format(data_name[0]))
print("爬取完成!!!")
三、成果展示:
爬取的字段可以自己增加或者进行删减。
转载请注明出处
python爬取微博博主历史博文存入Excel相关推荐
- python爬取微博指定内容_python3.5爬虫-爬取微博某博主微博内容
想要爬取某个博主的微博数据.在网络上寻找了很多关于爬取微博内容的教程,发现有些教程比较老旧了,已经无法再用,有些教程在我这里出现一些问题,比如爬取移动端的微博需要获取登陆cookie,而我的谷歌浏览器 ...
- python爬取微博用户信息(六)—— 完整代码
本节为爬取微博用户信息的完整代码,以及项目结构. 感兴趣的小伙伴可以收藏哦! 另外,关于本代码的效果展示,以及教程,点击以下链接即可. python爬取微博用户信息(一)-- 效果展示 python爬 ...
- python爬取微博用户信息(四)—— 爬取用户信息的功能函数
这一节,将会将 MicroBlog.py 文件中的函数介绍一下. 感兴趣的小伙伴可以收藏哦! 另外,关于本代码的效果展示,以及教程,点击以下链接即可. python爬取微博用户信息(一)-- 效果展示 ...
- python爬取微博用户信息(三)—— 创建MicroBlog类实例
这一节,主要讲述 main.py文件,该文件创建了一个MicroBlog类,MicroBlog类中包含一些爬取微博内容的函数. 以及简单介绍traceback的用法. 感兴趣的小伙伴可以收藏哦! 另外 ...
- python爬取微博用户信息(一)—— 效果展示
有时,我们想要了解一个人,一般会通过ta的微博.朋友圈以及朋友的看法去了解. 特别是面对自己喜欢的明星,我们常常会浏览ta的微博,了解ta的动态. 那么,在大数据时代,数据已经成为了不可缺少的一部分, ...
- python爬取微博数据词云_用Python爬取微博数据生成词云图片
原标题:用Python爬取微博数据生成词云图片 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业智能BI.大数 ...
- python3爬取微博评论教程_用python 爬取微博评论,怎么打开微博评论下的查看更多|...
怎样用python爬新浪微博大V所有数据 先上结论,通过公开的api如爬到某大v的所有数据,需足以下两个条件: 1.在你的爬虫开始运行时,该大v的所有微博发布量没有超过回溯查询的上限,新浪是2000, ...
- 使用Python爬取微博高清美女大图
打开微博官网,这里以爬取美女博主Duebass的所有图片为例,首先打开她的主页 主页中显示的都是一些小图,我们点击其中的某一张图片,就可以查看她的大图了. 打开F12查看图片的地址信息, //wx4. ...
- python爬取微博评论(无重复数据)
python爬取微博评论(无重复数据) 前言 一.整体思路 二.获取微博地址 1.获取ajax地址2.解析页面中的微博地址3.获取指定用户微博地址 三.获取主评论 四.获取子评论 1.解析子评论2.获 ...
最新文章
- 租约-分布式缓存一致性的高效容错机制
- http://alvinalexander.com/java/jwarehouse/hibernat
- 忘记mysq rootl密码
- 【转载】cuda编程入门
- Docker安装实践Jenkins
- redmine全记录(更新)
- 手动安装ojdbc6
- 遗传算法原理及应用三(遗传算法高级实现)
- 850万BTC,2万人参与,区块链时代看OKEx如何创新
- 如何删除在System中打开的iso文件
- 美敦力中国正式启动“X学院”;科济药业任命Richard John Daly为旗下美国公司总裁 | 医药健闻...
- conda安装包时提示当前用户没有权限
- 中年失业的处境有多艰难,成年人的生活不容易,且行且珍惜
- 吊打面试官,笑对 2022 金三银四,2022年最全面试真题大汇总
- 什么是GIS,GIS能干什么
- 解决QQ识图后复制文字然后将其粘贴到文件重命名中,总是显示重命名不成功
- SQL注入之字符型注入练习(pikachu)
- 最优化建模算法理论之Goldstein准则(数学原理及MATLAB实现)
- Android_性能优化之ViewPager加载成百上千高清大图oom解决方案
- detectron2更新Pytorch版本后的报错记录