微博数据爬虫——获取特定ID的热门转发用户列表(五)
前言:由于微博网页采用动态加载方式,只能获取到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的热门转发用户列表(五)相关推荐
- 微博数据爬虫——获取特定ID的粉丝和关注(二)
注意:近期发现使用requests库访问微博数据出现ssl error错误,而使用urllib库访问则不会出现错误 功能:给定特定微博用户ID,获取微博用户的粉丝和关注 1.通过o_id获取p_id ...
- 微博数据爬虫——获取用户微博相关信息(四)
任务:给定u_id,获取用户每条微博的mid.发布时间.照片数.@数.链接数 1.获取微博信息 查看网页源代码,发现数据保存在js中 利用正则匹配可以实现获取单条微博全部信息 add = urllib ...
- 微博数据爬虫——获取用户基本信息(三)
目标:获取微博用户的基本信息,如关注数.粉丝数.微博数量.注册时间 首先获取page_id 使用正则匹配获取 add = urllib.request.Request(url="https: ...
- python爬微博数据合法吗_Python 免登录微博数据爬虫(仅研究使用)
微博数据是非常有价值的数据,这些数据可以用作我们进行一些系统开发时的数据源, 比如前段时间发过的:Python 短文本识别个体是否有自杀倾向,在此文中,我们使用微博绝望树洞的数据,利用SVM做了一个简 ...
- 微博指定日期舆情数据爬虫获取—基于中文金融词典(python)
最近在做一个微博舆情与金融市场分析的课题,需要爬取微博的舆情数据.因此需要根据关键词爬取指定日期的微博.现在代码写完了,实测还行,sleep设置得比较久,但爬取的数据很完整.硕士三年在CSDN学到了很 ...
- 用爬虫获取网易云音乐热门歌手评论数
转载请注明作者和出处:http://blog.csdn.net/Monkey_D_Newdun 运行平台:Windows 10 IDE:Pycharm Python版本:3.6.0 浏览器:Chrom ...
- 微博数据爬虫——V影响力榜top100用户(一)
1.分析网页结构 网页链接如下:https://v6.bang.weibo.com/czv/domainlist?date=202103&period_type=month 可使用选择器提取b ...
- ServletContext的应用(共享数据、获取初始化参数、请求转发、读取资源文件)【源码解析】
ServletContext应用 1.共享数据 我在这个Servlet中保存的数据,可以在另外一个Servlet中拿到 public class HelloServlet extends HttpSe ...
- SQL学习之数据操作,基于Oracle下的HR用户(五)
操纵数据(DML) 数据操纵语言:当添加.更新或者删除数据库中的数据时需要使用 DML 语句.DML依据的一个集合构成了一个被称为事务的逻辑单元. 当完成下面操作时,DML 语句被执行: – 添加新行 ...
最新文章
- 使用isolation forest进行dns网络流量异常检测
- UIScrollView点击StatusBar返回顶部失效的解决
- 21上海省赛 F-鸡哥的限币令
- php -q poller.php --force,cacti 安装后没有图像
- bat 批处理获取时间语法格式
- Bootstrap ScrollSpy 用法
- 《第一行代码》学习笔记37-服务Service(4)
- 排序算法 c++(思想+code)
- 路由器IP-4-DUPADDR: Duplicate address和CDP-4-DUPLEX_MISMATCH错误的解决方案
- PyQT5 helloworld教程(转载)
- 三、synchronized同步锁
- 小波多尺度分析的发明:跨学科创新的典范
- 车牌字符识别算法原理
- 微信小程序开发者工具及官网
- 阿里云华为云对比分析
- 20172304 《程序设计与数据结构》第七周学习总结
- python通过QQ邮箱或163邮箱发送邮件(可带附件)
- 未来10年35项最值得你期待的技术
- 如何用Visual Studio 2022 编写C语言
- Redis 核心知识——01
热门文章
- BlackHat USA 2021 洞察(三):议题技术解读
- 7-2 求一元二次方程的根
- ffmpeg转换avi、mp4等视频格式为yuv格式
- Charles安装以及环境搭建
- UE4 Socket多线程非阻塞通信【2】
- 启动阿里云上的Mysql报错:The server quit without updating PID file (/[FAILED]mysql/xxxx.pid)解决的另一途径
- linux read() 函数
- 精准化测试之:jacoco实现增量代码覆盖率统计
- D. Very Suspicious
- 俄国防部组建信息作战部队 应对西方网络-心理攻击