一、环境以及微博接口

环境: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相关推荐

  1. python爬取微博指定内容_python3.5爬虫-爬取微博某博主微博内容

    想要爬取某个博主的微博数据.在网络上寻找了很多关于爬取微博内容的教程,发现有些教程比较老旧了,已经无法再用,有些教程在我这里出现一些问题,比如爬取移动端的微博需要获取登陆cookie,而我的谷歌浏览器 ...

  2. python爬取微博用户信息(六)—— 完整代码

    本节为爬取微博用户信息的完整代码,以及项目结构. 感兴趣的小伙伴可以收藏哦! 另外,关于本代码的效果展示,以及教程,点击以下链接即可. python爬取微博用户信息(一)-- 效果展示 python爬 ...

  3. python爬取微博用户信息(四)—— 爬取用户信息的功能函数

    这一节,将会将 MicroBlog.py 文件中的函数介绍一下. 感兴趣的小伙伴可以收藏哦! 另外,关于本代码的效果展示,以及教程,点击以下链接即可. python爬取微博用户信息(一)-- 效果展示 ...

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

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

  5. python爬取微博用户信息(一)—— 效果展示

    有时,我们想要了解一个人,一般会通过ta的微博.朋友圈以及朋友的看法去了解. 特别是面对自己喜欢的明星,我们常常会浏览ta的微博,了解ta的动态. 那么,在大数据时代,数据已经成为了不可缺少的一部分, ...

  6. python爬取微博数据词云_用Python爬取微博数据生成词云图片

    原标题:用Python爬取微博数据生成词云图片 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业智能BI.大数 ...

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

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

  8. 使用Python爬取微博高清美女大图

    打开微博官网,这里以爬取美女博主Duebass的所有图片为例,首先打开她的主页 主页中显示的都是一些小图,我们点击其中的某一张图片,就可以查看她的大图了. 打开F12查看图片的地址信息, //wx4. ...

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

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

最新文章

  1. 租约-分布式缓存一致性的高效容错机制
  2. http://alvinalexander.com/java/jwarehouse/hibernat
  3. 忘记mysq rootl密码
  4. 【转载】cuda编程入门
  5. Docker安装实践Jenkins
  6. redmine全记录(更新)
  7. 手动安装ojdbc6
  8. 遗传算法原理及应用三(遗传算法高级实现)
  9. 850万BTC,2万人参与,区块链时代看OKEx如何创新
  10. 如何删除在System中打开的iso文件
  11. 美敦力中国正式启动“X学院”;科济药业任命Richard John Daly为旗下美国公司总裁 | 医药健闻...
  12. conda安装包时提示当前用户没有权限
  13. 中年失业的处境有多艰难,成年人的生活不容易,且行且珍惜
  14. 吊打面试官,笑对 2022 金三银四,2022年最全面试真题大汇总
  15. 什么是GIS,GIS能干什么
  16. 解决QQ识图后复制文字然后将其粘贴到文件重命名中,总是显示重命名不成功
  17. SQL注入之字符型注入练习(pikachu)
  18. 最优化建模算法理论之Goldstein准则(数学原理及MATLAB实现)
  19. Android_性能优化之ViewPager加载成百上千高清大图oom解决方案
  20. detectron2更新Pytorch版本后的报错记录

热门文章

  1. mysql 家谱树查询_无限级分类之查找子孙树和家谱树
  2. 高中数学公式必背的50条秒杀技巧(学霸必备)
  3. Tika解析rar文件
  4. MotionLayout,一篇文章带你了解Android最新的动画布局
  5. 上线群聊功能 阿里搞不赢的社交美团能行吗?
  6. 线阵CCD相机与面阵相机的区别
  7. 区块链学习笔记23——ETH反思
  8. 黎明职业大学计算机教研室主任,黎明职业大学计算机系相关专业.doc
  9. 用AkShare获取沪深京A股所有股票历史数据
  10. 【源代码扫描工具】 -‪Checkmarx使用