任务:给定u_id,获取用户每条微博的mid、发布时间、照片数、@数、链接数

1.获取微博信息

查看网页源代码,发现数据保存在js中

利用正则匹配可以实现获取单条微博全部信息

add = urllib.request.Request(url="https://weibo.com/u/%s?is_all=1" % o_id, headers=headers)
r = urllib.request.urlopen(url=add, timeout=10).read().decode('utf-8')
page_id = re.findall(r'\$CONFIG\[\'page_id\']=\'(\d+)\'',r)[0]
domain = re.findall(r'\$CONFIG\[\'domain\']=\'(\d+)\'',r)[0]
forums = re.findall(r'<div action-data=\\"cur_visible=0\\"   (.*?)<div node-type=\\"feed_list_repeat\\"', r)

由于微博使用动态加载技术,一次刷新不会将所有数据显示,分析网络,可发现ajax交互接口

domain:用户所在域

id:用户的page_id

page:指当前微博页数

pre_page:当为0时为初始时的网页数据,为1时为后续动态加载网页数据

pagebar:指数据块,为0或1,共动态加载两次

is_all:当为1时表示显示全部,默认为0显示热门

使用如下方法获取:

url = "https://weibo.com/p/aj/v6/mblog/mbloglist?domain=%s&id=%s&page=1&pre_page=1&pagebar=%d&is_all=1" % (domain,page_id,i)
add = urllib.request.Request(url=url, headers=headers)
r = urllib.request.urlopen(url=add, timeout=10).read().decode('utf-8')
forums = re.findall(r'<div action-data=\\"cur_visible=0\\"   (.*?)<div node-type=\\"feed_list_repeat\\"', r)

2.获取详细信息

部分博文存在折叠,分析ajax可知

其中mid为博文id

使用正则表达式分别获取mid、date、num_picture、num_at、urls

dic_forum = {}
if('feedtype=\\"top\\"' in forum):continue
print(forum)
# 获取帖子mid值
mid = re.findall(r'.*?mid=\\"(.*?)\\"', forum)[0]
# print(mid)
dic_forum["mid"] = mid
# 获取发帖日期
date = re.findall(r'<div class=\\"WB_from S_txt2\\">.*?title=\\"(.*?)\\"', forum)[0]
# print(date)
dic_forum["date"] = date
# 获取帖子中照片数量
pic_content = re.findall(r'<div class=\\"WB_media_wrap clearfix\\"(.*?)<div class=\\"WB_feed_handle\\"', forum)[0]
num_picture = pic_content.count("<img")
# print(num_picture)
dic_forum["num_picture"] = num_picture
# 获取贴文正文
print("https://weibo.com/p/aj/mblog/getlongtext?mid=%s" % mid)
add = urllib.request.Request(url="https://weibo.com/p/aj/mblog/getlongtext?mid=%s" % mid, headers=headers)
r = urllib.request.urlopen(url=add, timeout=20).read().decode('utf-8')
r = json.loads(r)
content = r["data"]["html"].strip()
# print(content)
# 获取帖子中@数量
num_at = content.count("@")
# print(num_at)
dic_forum["num_at"] = num_at
# 获取帖子中链接
urls = re.findall(r'<a .*?href="(.*?)".*?>(<i.*?i>)(.*?)</a>', content,re.DOTALL)
dic_forum["urls"] = urls
# for url in urls:
#     print(url)
print(dic_forum)

3.结果展示如下

完整代码如下:

import json
import re
from urllib import request
import urllibdef get_user_action(o_id):dic = {}list_forum = []# o_id = "1906123125"headers = {'authority': 'weibo.com','cache-control': 'max-age=0','sec-ch-ua': '"Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"','sec-ch-ua-mobile': '?0','upgrade-insecure-requests': '1','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36','accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9','sec-fetch-site': 'same-origin','sec-fetch-mode': 'navigate','sec-fetch-user': '?1','sec-fetch-dest': 'document','referer': 'https://weibo.com/u/6598708078/home?wvr=5','accept-language': 'zh-CN,zh;q=0.9','cookie': 'SINAGLOBAL=6305977095079.815.1616397209554; SSOLoginState=1618917180; _s_tentry=login.sina.com.cn; UOR=,,login.sina.com.cn; Apache=7071940489168.076.1618917200237; ULV=1618917200242:6:2:1:7071940489168.076.1618917200237:1617503411652; wvr=6; wb_view_log_6598708078=1440*9601.5; cross_origin_proto=SSL; YF-V-WEIBO-G0=35846f552801987f8c1e8f7cec0e2230; XSRF-TOKEN=45rC1wyVvSAx7fD53JNw-38S; WBPSESS=GS0Mn6dIADoJhzs_MfDvHWLXds7EG9PUvBi37ybX2mXhRHouun3I_3Tetg1ZJwZkwiVUuzeobvUNtManelkGEDBu3ldGLLDtHqwHXdFQU5Rtn6DHyCI8YwBKGzMTlVco; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9Whz61LsS7a7JfSRlmm6Blq55JpX5KMhUgL.Foqf1KnNehn7S0n2dJLoIpYc1K2Ni--ciKn7iKL2i--fiKLsiKLsi--Xi-iFiK.R; ALF=1650540187; SCF=AgNorTL2GgvK5yfYVqY3knwSwqj5lZNS84d3pueWId7X5fQNxn7hY45Jz_p-WnLZNVE5BJKs_3idUoB_7I--_KE.; SUB=_2A25NhHtNDeRhGeBL4loW8CbMzDSIHXVu8OuFrDV8PUNbmtAKLVTekW9NRq1zk4_vupdS2eRTGsx3HROkcIPyHAL9; WBStorage=8daec78e6a891122|undefined; webim_unReadCount=%7B%22time%22%3A1619004235551%2C%22dm_pub_total%22%3A0%2C%22chat_group_client%22%3A0%2C%22chat_group_notice%22%3A0%2C%22allcountNum%22%3A5%2C%22msgbox%22%3A0%7D',}add = urllib.request.Request(url="https://weibo.com/u/%s?is_all=1" % o_id, headers=headers)r = urllib.request.urlopen(url=add, timeout=10).read().decode('utf-8')page_id = re.findall(r'\$CONFIG\[\'page_id\']=\'(\d+)\'',r)[0]domain = re.findall(r'\$CONFIG\[\'domain\']=\'(\d+)\'',r)[0]forums = re.findall(r'<div action-data=\\"cur_visible=0\\"   (.*?)<div node-type=\\"feed_list_repeat\\"', r)print(len(forums))for i in range(0,3):for forum in forums:dic_forum = {}if('feedtype=\\"top\\"' in forum):continueprint(forum)# 获取帖子mid值mid = re.findall(r'.*?mid=\\"(.*?)\\"', forum)[0]# print(mid)dic_forum["mid"] = mid# 获取发帖日期date = re.findall(r'<div class=\\"WB_from S_txt2\\">.*?title=\\"(.*?)\\"', forum)[0]# print(date)dic_forum["date"] = date# 获取帖子中照片数量pic_content = re.findall(r'<div class=\\"WB_media_wrap clearfix\\"(.*?)<div class=\\"WB_feed_handle\\"', forum)[0]num_picture = pic_content.count("<img")# print(num_picture)dic_forum["num_picture"] = num_picture# 获取贴文正文print("https://weibo.com/p/aj/mblog/getlongtext?mid=%s" % mid)add = urllib.request.Request(url="https://weibo.com/p/aj/mblog/getlongtext?mid=%s" % mid, headers=headers)r = urllib.request.urlopen(url=add, timeout=20).read().decode('utf-8')r = json.loads(r)content = r["data"]["html"].strip()# print(content)# 获取帖子中@数量num_at = content.count("@")# print(num_at)dic_forum["num_at"] = num_at# 获取帖子中链接urls = re.findall(r'<a .*?href="(.*?)".*?>(<i.*?i>)(.*?)</a>', content,re.DOTALL)dic_forum["urls"] = urls# for url in urls:#     print(url)print(dic_forum)list_forum.append(dic_forum)# 两次动态加载网页surl = "https://weibo.com/p/aj/v6/mblog/mbloglist?domain=%s&id=%s&page=1&pre_page=1&pagebar=%d&is_all=1"\% (domain,page_id,i)add = urllib.request.Request(url=url, headers=headers)r = urllib.request.urlopen(url=add, timeout=10).read().decode('utf-8')forums = re.findall(r'<div action-data=\\"cur_visible=0\\"   (.*?)<div node-type=\\"feed_list_repeat\\"', r)print(len(forums))dic["o_id"] = o_iddic["forum_data"] = list_forumreturn dicif __name__ == '__main__':dic = get_user_action("1906123125")json_f = open("data/data_九州亿品.json", "w")json.dump(dic, json_f, indent=4)

微博数据爬虫——获取用户微博相关信息(四)相关推荐

  1. 微博数据爬虫——获取用户基本信息(三)

    目标:获取微博用户的基本信息,如关注数.粉丝数.微博数量.注册时间 首先获取page_id 使用正则匹配获取 add = urllib.request.Request(url="https: ...

  2. 微博数据爬虫——获取特定ID的热门转发用户列表(五)

    前言:由于微博网页采用动态加载方式,只能获取到js脚本,不能使用beautifulsoup解析,需要使用正则匹配获取信息 1.获取用户热门帖子转发地址 如下Kb4cwauSp为转发地址的关键参数 使用 ...

  3. 微博数据爬虫——获取特定ID的粉丝和关注(二)

    注意:近期发现使用requests库访问微博数据出现ssl error错误,而使用urllib库访问则不会出现错误 功能:给定特定微博用户ID,获取微博用户的粉丝和关注 1.通过o_id获取p_id ...

  4. 爬虫获取豆瓣喜剧电影相关信息

    利用Requests库爬取豆瓣喜剧电影排行榜 前两百部电影的相关信息 首先附上豆瓣电影的网站链接: 思考步骤: 最后附上本文的代码: 前200部电影结果展示: 首先附上豆瓣电影的网站链接: 链接: l ...

  5. python爬微博数据合法吗_Python 免登录微博数据爬虫(仅研究使用)

    微博数据是非常有价值的数据,这些数据可以用作我们进行一些系统开发时的数据源, 比如前段时间发过的:Python 短文本识别个体是否有自杀倾向,在此文中,我们使用微博绝望树洞的数据,利用SVM做了一个简 ...

  6. 实现一个简易版的微博,包含 client 和 server 两部分,并实现四个基础功能:关注、取关、发微博、获取用户微博列表

    const assert = require('assert'); const question = '实现一个简易版的微博,包含 client 和 server 两部分,并实现四个基础功能:关注.取 ...

  7. 某投诉网站爬虫-获取对应的投诉信息

    某投诉网站爬虫-获取对应的投诉信息 此爬虫原本是一道面试题,说难不难,说简单也不简单:因为站点的反爬机制,我现在也没摸清楚,不过目前看来应该是你在一段时间内访问数据超过对应的数量就会封ip 5-10分 ...

  8. 手机端或PC端利用高德地图和腾讯地图获取用户当前位置信息

    目录 一.简介 二.高德地图 三.腾讯地图 四.总结 一.简介 最近在项目中,有需要使用到获取用户当前地理位置信息的功能,获取当前用户位置保存到数据库中的场景,并且需要支持多种地图定位方式,我这里采用 ...

  9. python爬虫获取肯德基门店信息

    python爬虫获取肯德基门店信息 1.在谷歌浏览器中打开肯德基官网,进入餐厅查询页面 2.在搜索框中输入地区并按f12打开开发者工具 发现已经抓取到了一条Ajax请求,可以从中获取请求的url,以及 ...

最新文章

  1. Hadoop运行模式 之 伪分布式运行模式
  2. 2012-08-17
  3. day13 Java学习(常见对象正则表达式)
  4. 城市中计算机控制系统的应用,计算机联锁控制系统在北京城铁中的应用
  5. 【window操作系统下Github版本的回滚问题】
  6. 搭建第一个springBoot 摘抄自蚂蚁课堂
  7. Socket网络编程进阶与实战
  8. 为什么计算机软件是无形资产,购买软件是否属于无形资产
  9. 安排座位 java_座位安排(seat)
  10. 大话转岗 PHP 开发小结
  11. OpenCASCADE7.6编译
  12. 蓝牙音频传输格式-AAC
  13. Python库——Faker
  14. php几个时间段去除重复,一个时间段内各地区数据和,发现重复地区不相加
  15. Jieba分词并去停用词
  16. Ubuntu 16.04 LTS安装sogou输入法详解
  17. 时间序列分析预测实战之指数平滑法
  18. cie规定的标准光源_标准光源介绍
  19. 小球自由落体_自由落体瀑布
  20. 名字竞技场 V3.0

热门文章

  1. 减少巨大pdf文件大小
  2. linux qt执行adb,类豌豆荚: Linux Mint实测QtADB安卓管理客户端
  3. Microsoft Visual Studio 遇到了问题,需要关闭的一种可能的解决方法(转载)
  4. 数据中台:企业数据质量参差不齐?听听专家怎么说
  5. GM(1,1)和GM(1,n)预测模型
  6. bat的命令若干用法
  7. 故障演练--使用 ChaosBlade 进行混沌实验
  8. 淘宝API拍立淘搜索
  9. 【劝退贴】学人工智能?你想好了吗?
  10. 【论文汇总】人工智能顶会深度主动学习(Deep Active Learning)相关论文