前言:由于微博网页采用动态加载方式,只能获取到js脚本,不能使用beautifulsoup解析,需要使用正则匹配获取信息

1.获取用户热门帖子转发地址

如下Kb4cwauSp为转发地址的关键参数

使用正则进行匹配

add = urllib.request.Request(url="https://weibo.com/u/%s?is_hot=1" % o_id, headers=headers)
r = urllib.request.urlopen(url=add, timeout=10).read().decode('utf-8')
repost_links = re.findall(r'<a  action-data=\\"allowForward=1&url=https:\\/\\/weibo.com\\/%s\\/(.*?)&mid=(\d+)&' % o_id, r)

如下为参数的使用方式

2.获取转发地址下转发用户ID

通过分析ajax数据,可知转发列表通过ajax传输数据

接口地址如下所示

使用正则匹配可以匹配到相关信息

url = "https://weibo.com/aj/v6/mblog/info/big?id=%s&page=%d" % (id, page_num)
add = urllib.request.Request(url=url,headers=headers)
r = urllib.request.urlopen(url=add, timeout=10).read().decode("utf8")
r = json.loads(r)
html = r["data"]["html"]
page = r["data"]["page"]["totalpage"]
repost_users = re.findall(r'usercard="id=(.*?)" node-type="name"', html)

3.最终结果如下所示

完整代码如下所示:

import json
import re
from urllib import request
import urllibdef get_post_user(o_id):dic = {}list_repost = []# o_id = "1968758563"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/p/1005057006403277/home?from=page_100505&mod=TAB','accept-language': 'zh-CN,zh;q=0.9','cookie': 'SINAGLOBAL=6305977095079.815.1616397209554; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9Whz61LsS7a7JfSRlmm6Blq55JpX5KMhUgL.Foqf1KnNehn7S0n2dJLoIpYc1K2Ni--ciKn7iKL2i--fiKLsiKLsi--Xi-iFiK.R; ALF=1650453176; SSOLoginState=1618917180; SCF=AgNorTL2GgvK5yfYVqY3knwSwqj5lZNS84d3pueWId7X8UrmumFcK5RzqIA1AeSsRoxjI-uFDhQr8Ls_HmgW3Ig.; SUB=_2A25NesdsDeRhGeBL4loW8CbMzDSIHXVu8b-krDV8PUNbmtAKLWagkW9NRq1zk3DqkxCQtlPWwfMBOeiJ_k-vowk5; _s_tentry=login.sina.com.cn; UOR=,,login.sina.com.cn; Apache=7071940489168.076.1618917200237; ULV=1618917200242:6:2:1:7071940489168.076.1618917200237:1617503411652; wb_view_log_6598708078=1440*9601.5; webim_unReadCount=%7B%22time%22%3A1618924157611%2C%22dm_pub_total%22%3A0%2C%22chat_group_client%22%3A0%2C%22chat_group_notice%22%3A0%2C%22allcountNum%22%3A42%2C%22msgbox%22%3A0%7D',}add = urllib.request.Request(url="https://weibo.com/u/%s?is_hot=1" % o_id, headers=headers)r = urllib.request.urlopen(url=add, timeout=10).read().decode('utf-8')repost_links = re.findall(r'<a  action-data=\\"allowForward=1&url=https:\\/\\/weibo.com\\/%s\\/(.*?)&mid=(\d+)&' % o_id, r)print(repost_links)print(len(repost_links))try:for post_num in range(len(repost_links)):print("第%d篇帖子" % post_num)id = repost_links[post_num][1]print(id)dic_post = {}repost_users_all = []for page_num in range(1,21):try:print("第%d页" % page_num)url = "https://weibo.com/aj/v6/mblog/info/big?id=%s&page=%d" % (id, page_num)print(url)add = urllib.request.Request(url=url,headers=headers)r = urllib.request.urlopen(url=add, timeout=10).read().decode("utf8")r = json.loads(r)html = r["data"]["html"]page = r["data"]["page"]["totalpage"]repost_users = re.findall(r'usercard="id=(.*?)" node-type="name"', html)print(len(repost_users))print(repost_users)repost_users_all.extend(repost_users)print(page)if (str(page_num) == page):breakexcept:breakdic_post["mid"] = iddic_post["repost_users"] = repost_users_alllist_repost.append(dic_post)except:passdic["o_id"] = o_iddic["repost_data"] = list_repostreturn dicdic = get_post_user("1968758563")
json_f = open("data/data_李佳琪.json","w")
json.dump(dic, json_f)

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

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

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

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

    任务:给定u_id,获取用户每条微博的mid.发布时间.照片数.@数.链接数 1.获取微博信息 查看网页源代码,发现数据保存在js中 利用正则匹配可以实现获取单条微博全部信息 add = urllib ...

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

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

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

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

  5. 微博指定日期舆情数据爬虫获取—基于中文金融词典(python)

    最近在做一个微博舆情与金融市场分析的课题,需要爬取微博的舆情数据.因此需要根据关键词爬取指定日期的微博.现在代码写完了,实测还行,sleep设置得比较久,但爬取的数据很完整.硕士三年在CSDN学到了很 ...

  6. 用爬虫获取网易云音乐热门歌手评论数

    转载请注明作者和出处:http://blog.csdn.net/Monkey_D_Newdun 运行平台:Windows 10 IDE:Pycharm Python版本:3.6.0 浏览器:Chrom ...

  7. 微博数据爬虫——V影响力榜top100用户(一)

    1.分析网页结构 网页链接如下:https://v6.bang.weibo.com/czv/domainlist?date=202103&period_type=month 可使用选择器提取b ...

  8. ServletContext的应用(共享数据、获取初始化参数、请求转发、读取资源文件)【源码解析】

    ServletContext应用 1.共享数据 我在这个Servlet中保存的数据,可以在另外一个Servlet中拿到 public class HelloServlet extends HttpSe ...

  9. SQL学习之数据操作,基于Oracle下的HR用户(五)

    操纵数据(DML) 数据操纵语言:当添加.更新或者删除数据库中的数据时需要使用 DML 语句.DML依据的一个集合构成了一个被称为事务的逻辑单元. 当完成下面操作时,DML 语句被执行: – 添加新行 ...

最新文章

  1. 使用isolation forest进行dns网络流量异常检测
  2. UIScrollView点击StatusBar返回顶部失效的解决
  3. 21上海省赛 F-鸡哥的限币令
  4. php -q poller.php --force,cacti 安装后没有图像
  5. bat 批处理获取时间语法格式
  6. Bootstrap ScrollSpy 用法
  7. 《第一行代码》学习笔记37-服务Service(4)
  8. 排序算法 c++(思想+code)
  9. 路由器IP-4-DUPADDR: Duplicate address和CDP-4-DUPLEX_MISMATCH错误的解决方案
  10. PyQT5 helloworld教程(转载)
  11. 三、synchronized同步锁
  12. 小波多尺度分析的发明:跨学科创新的典范
  13. 车牌字符识别算法原理
  14. 微信小程序开发者工具及官网
  15. 阿里云华为云对比分析
  16. 20172304 《程序设计与数据结构》第七周学习总结
  17. python通过QQ邮箱或163邮箱发送邮件(可带附件)
  18. 未来10年35项最值得你期待的技术
  19. 如何用Visual Studio 2022 编写C语言
  20. Redis 核心知识——01

热门文章

  1. BlackHat USA 2021 洞察(三):议题技术解读
  2. 7-2 求一元二次方程的根
  3. ffmpeg转换avi、mp4等视频格式为yuv格式
  4. Charles安装以及环境搭建
  5. UE4 Socket多线程非阻塞通信【2】
  6. 启动阿里云上的Mysql报错:The server quit without updating PID file (/[FAILED]mysql/xxxx.pid)解决的另一途径
  7. linux read() 函数
  8. 精准化测试之:jacoco实现增量代码覆盖率统计
  9. D. Very Suspicious
  10. 俄国防部组建信息作战部队 应对西方网络-心理攻击