微博话题下的数据爬取

1、前言

    新浪微博中,一个话题下各个媒体或用户发表在平台发表的信息是舆情研究的一个很重要的数据来源,这里记录一下一个话题下数据的爬取方式,以“#美国疫情#”话题为例。

2、话题下数据爬取

     首先参考这篇文章,分析话题下数据爬取的结构,然后仿照示例得到如下代码:

import requests
from urllib.parse import urlencode
from pyquery import PyQuery as pq
import time
import xlwt#设置代理等(新浪微博的数据是用ajax异步下拉加载的,network->xhr)
host = 'm.weibo.cn'
base_url = 'https://%s/api/container/getIndex?' % host
user_agent = 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Mobile Safari/537.36'#设置请求头
headers = {'Host': host,'Referer': 'https://m.weibo.cn/search?containerid=231522type%3D1%26q%3D%23%E7%BE%8E%E5%9B%BD%E7%96%AB%E6%83%85%23','User-Agent': user_agent
}# 按页数抓取数据
def get_single_page(page):#请求参数params = {'containerid': '231522type=1&q=#美国疫情#','page_type': 'searchall','page': page}url = base_url + urlencode(params)try:response = requests.get(url, headers=headers)if response.status_code == 200:return response.json()except requests.ConnectionError as e:print('抓取错误', e.args)# 解析页面返回的json数据
global count
count = 0
def parse_page(json):global countitems = json.get('data').get('cards')for item in items:item = item.get('mblog')if item:data = {'id': item.get('id'),'created': item.get('created_at'),'text': pq(item.get("text")).text(),  # 仅提取内容中的文本}yield datacount +=1if __name__ == '__main__':workbook = xlwt.Workbook(encoding='utf-8')# 创建一个表格worksheet = workbook.add_sheet('美国疫情')for page in range(1, 200):  # 瀑布流下拉式,加载200次json = get_single_page(page)results = parse_page(json)tmp_list = []print(count)for result in results: #需要存入的字段worksheet.write(count, 0, label=result.get('created').strip('\n'))worksheet.write(count, 1, label=result.get('text').strip('\n'))time.sleep(1) #爬取时间间隔workbook.save('conv.xls')

3、展开全文解决方法

    仅用以上方法爬取存在一个弊端:如果文章过长,界面上就会出现“展开全文”字样,用此方法无法爬取到长文本。

    观察字段,存在isLongText布尔型字段:

    “展开原文”部分实际上是一个链接,组成方式为“https://m.weibo.cn/status/”+id,这个id是被爬取的文章对应的id,因此需要在爬取之前判断是否为长文本,如果是,则需要根据响应的id跳转到对应的页面再次爬取,完善部分代码片段:

#长文本爬取代码段
def getLongText(lid): #lid为长文本对应的id# 长文本请求头headers_longtext = {'Host': host,'Referer': 'https://m.weibo.cn/status/' +lid,'User-Agent': user_agent}params = {'id' : lid}url = 'https://m.weibo.cn/statuses/extend?' +urlencode(params)try:response = requests.get(url, headers=headers_longtext)if response.status_code == 200: #数据返回成功jsondata = response.json()tmp = jsondata.get('data')return pq(tmp.get("longTextContent")).text() #解析返回结构,获取长文本对应内容except requests.ConnectionError as e:print('抓取错误', e.args)# 解析页面返回的json数据
global count
count = 0'''
修改后的页面爬取解析函数
'''
def parse_page(json):global countitems = json.get('data').get('cards')for item in items:item = item.get('mblog')if item:if item.get('isLongText') is False: #不是长文本data = {'id': item.get('id'),'name': item.get('user').get('screen_name'),'created': item.get('created_at'),'text': pq(item.get("text")).text(),  # 仅提取内容中的文本'attitudes': item.get('attitudes_count'),'comments': item.get('comments_count'),'reposts': item.get('reposts_count')}else: #长文本涉及文本的展开tmp = getLongText(item.get('id')) #调用函数data = {'id': item.get('id'),'name': item.get('user').get('screen_name'),'created': item.get('created_at'),'text': tmp,  # 仅提取内容中的文本'attitudes': item.get('attitudes_count'),'comments': item.get('comments_count'),'reposts': item.get('reposts_count')}yield datacount +=1

4、总结

    话题下数据爬取相对简单,且不涉及用户登录,但数据爬取间隔过快,或者爬取次数过多,ip会被封掉,另外数据爬取工具也有很多,比如爬山虎不一定非要自己编程实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/55901.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信微博Facebook们,到底从你身上榨取了什么?

硅谷Live / 实地探访 / 热点探秘 / 深度探讨 如果你不再想从早到晚手机不离身,不再想每小时刷好几遍知乎微博微信 YouTube 和 Instagram,不再想每天被手机分散注意力导致碌碌无为,那这篇文章正是为你准备。 科技公司搜刮你的注意力 在那本著名…

新浪微博PC端登录分析

本来给自己定了个2018的目标,平均每月写两篇文章,现在已经快三月了,第一篇稿子才憋出来,惭愧呀,直入主题吧,今天给大家带来的是新浪微博PC端的模拟登陆。 工具 这次使用的工具是Charles和chrome浏览器&am…

腾讯空间、新浪微博、腾讯微博分享接口

腾讯空间、新浪微博、腾讯微博分享接口。 注意&#xff1a;在网站对接前&#xff0c;请先申请注册好您的QQ登录appid、新浪登录Appkey、腾讯微博appkey。 1、引用JS文件 <script src"http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" data-appid&quo…

Android模仿新浪微博(写微博界面)

发布一条新微博接口&#xff1a;http://open.weibo.com/wiki/2/statuses/update 上传图片并发布一条新微博接口&#xff1a;http://open.weibo.com/wiki/2/statuses/upload 1.根据有没有图片来选择相应的接口。 2.根据输入框的改变判断文字数。 3.创建一个girlview显示发送…

android客户端接入新浪、腾讯微博以及人人网

本文原创http://blog.csdn.net/yanbin1079415046&#xff0c;转载请注明出处。 从事android工作也有段时间了&#xff0c;碍于肚子里料不多&#xff0c;一直也没写过什么东西。最近刚好项目中要接入新浪微博&#xff0c;就顺便研究了一下android客户端接入腾讯微博和人人网。由…

【第三方互联】9、新浪微博(sina)授权第三方登录

当我们创建的新浪微博互联应用成功后,我们便可以开始使用该应用来实现新浪微博授权操作 一、获取 App Key 和 App Secret 1、在“我的应用”,点击应用,查看我们创建的应用的基本信息 这样,我们就获取到了 App Key 和 App Secret 2、将 App Key 和 App Secret,以及该应用…

爬取微博上某大v,明星,官微等用户的微博信息的小技巧

通常成功的大门&#xff0c;其实都是虚掩着的 现在大多在爬取微博时&#xff0c;都是采用selenium框架&#xff0c;爬取pc端微博页面&#xff0c;模拟鼠标下拉来解决动态加载的问题&#xff0c;虽然笨拙&#xff0c;但是也能解决问题。今天我给大家推荐个更加好的方法。首先清看…

用ChatGPT可以去微博做个大V了(狗头)

将来用ChatGPT可以去微博做个大V了&#xff08;狗头&#xff09; 体验最近很火的ChatGPT体验了一下&#xff0c;这个OpenAI是真的强。 这小诗写的还挺有意境&#xff0c;网上搜了一下还没看到完全一样的。 现在各大厂商都布局OpenAI&#xff0c;期待更多黑科技。

黄仁勋评价股东孙正义

看NVIDIA人工智能全局&#xff0c;黄仁勋评价股东孙正义 “孙正义是我所知道的唯一能准确预知每一次科技浪潮的人。” 云科技时代 2017/06/18 21:01评论(0) 收藏(0)字体&#xff1a;宋 英伟达孙正义 (黄仁勋在2017台北Computex上) 2017年5月&#xff0c;传出软银悄悄购入40亿美…

英伟达CEO黄仁勋:NFT元宇宙已经到来

在与 Venturebeat 视频游戏记者 Dean Takahashi 的对话中&#xff0c;英伟达&#xff08;Nvidia&#xff09;首席执行官黄仁勋 Jensen Huang 表示&#xff0c;他相信“我们正处于基于区块链的增强现实元宇宙的风口浪尖”。 在周六发表的采访中&#xff0c;这位显卡巨头负责人描…

“核弹”之父——黄仁勋

一抹幽绿&#xff0c;有如眼睛一般的形状——相信已经很难有人不认识NVIDIA那标志性的LOGO了。今天的NVIDIA在显卡领域可谓无人能及&#xff0c;在通用计算和AI领域也留下浓重一笔&#xff0c;而带领NVIDIA取得现在成就的就是NVIDIA的联合创始人、CEO——黄仁勋。 初识老黄 想…

华人“军火专家”——黄仁勋

昨天我们介绍GPU的文章中有提到一位华人&#xff0c;他由于两款产品发热量大到能煎鸡蛋&#xff0c;被游戏玩家戏称为“两弹元勋”“军火专家”&#xff0c;在硅谷被认为是和杰夫贝索斯、伊隆马斯克并驾齐驱的人物&#xff0c;他创办的公司尽管不像智能手机企业、互联网企业那样…

黄仁勋没有回应,英伟达没有新品

晓査 乾明 假装发自 苏州量子位 出品 | 公众号 QbitAI 黄仁勋上台&#xff0c;然后下台。 在今天上午的GTC China大会上&#xff0c;黄教主没能拿出让人惊艳的新品&#xff0c;也没有只字片语回应英伟达的目前的“困境”。 大会之后的采访环节&#xff0c;老黄也没来。 据说是&…

黄仁勋把自己做成了虚拟娃娃

明敏 发自 凹非寺量子位 报道 | 公众号 QbitAI 英伟达是推出黄仁勋手办了吗&#xff1f;&#xff1f;&#xff1f; 看上去还挺可爱的呢。 不过事情可没有这么简单&#xff0c;接下来这一幕或许就会让你大为震撼。 因为&#xff0c;这个萌版老黄&#xff0c;是 会 动 的。 不仅如…

虚拟人是如何制作的?企业专属虚拟形象如何定制打造成虚拟代言?

虚拟数字人是指以数字形式存在于数字空间中&#xff0c;具有拟人或真人的外貌、行为和特点的虚拟人物&#xff0c;也称之为虚拟形象、数字虚拟人等。虚拟数字人核心技术主要包括计算机图形学、动作捕捉、图像渲染、AI等。虚拟数字人可以打造更完美的人设&#xff0c;为品牌带来…

GPT学习路线分享

初代GPT-3展示了三个重要能力&#xff1a; 语言生成&#xff1a;遵循提示词&#xff08;prompt&#xff09;&#xff0c;然后生成补全提示词的句子。这也是今天人类与语言模型最普遍的交互方式。 上下文学习 (in-context learning): 遵循给定任务的几个示例&#xff0c;然后为…

程序员的数学---数学思维的锻炼

第三章&#xff1a; 余数–周期性和分组 星期问题 来看一道简单的题目&#xff1a;今天星期日&#xff0c;那么 100 天以后星期几&#xff1f; 这个问题最笨的方法就是数数了。不过那样也是颇为费事&#xff0c;从余数方向考虑&#xff1a;一个礼拜 7 天&#xff0c;100 天等…

LaTeX技巧10:LaTeX数学公式输入初级入门

常见数学公式问题集下载 LaTeX最强大的功能就是显示美丽的数学公式&#xff0c;下面我们来看这些公式是怎么实现的。 1、数学公式的前后要加上 $ 或 \( 和 \)&#xff0c;比如&#xff1a;$f(x) 3x 7$ 和 \(f(x) 3x 7\) 效果是一样的&#xff1b; 如果用 \[ 和 \]&#xf…

Latex系列4---数学公式

前面几章其实已经把基础的Latex中文文本写的差不多了。这一章节针对我论文中用到的数学公式写一些心得。 数学公式 通常理工科写论文&#xff0c;少不了数学公式。在公式上&#xff0c;我个人认为相比word&#xff0c;latex还是有非常大的优势。 行内公式 行内公式通常用一对…

在OneNote种使用Latex命令愉快地敲出数学公式

在OneNote种使用Latex命令愉快地敲出数学公式 office中所有支持键盘输入的公式 office中默认是用的Unicodemath&#xff0c;相关的语法上个链接里面就有&#xff0c;office提供了Unicodemath与latex互转的方法。相关链接如下&#xff1a;LaTeX Math in Office Unicodemath …