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

通常成功的大门,其实都是虚掩着的


现在大多在爬取微博时,都是采用selenium框架,爬取pc端微博页面,模拟鼠标下拉来解决动态加载的问题,虽然笨拙,但是也能解决问题。今天我给大家推荐个更加好的方法。首先清看下面两个url对应的页面有什么不同?

https://weibo.cn/1195354434 (手机触屏版新浪微博林俊杰个人主页的url)
在这里插入图片描述
https://m.weibo.cn/u/1195354434 (手机端新浪微博林俊杰个人主页的url)
在这里插入图片描述
https://weibo.com/jjlin (PC端新浪微博林俊杰个人主页的url)https://weibo.com/1195354434这两个url一样
在这里插入图片描述

相信看到这里,应该可以想到我们使用第一类的url去爬取数据应该更好,看下图,翻看微博所有内容只需要更改url里面的参数即可,相信到这里大家都会了吧,爬取微博的url也是虚掩着的,只是你没发现
在这里插入图片描述

代码大部分拷贝而来(做了优化改进),请看原文[Python3爬虫]爬取新浪微博用户信息及微博内容

"""
@author: cht
@time: 2019/12/7  17:33
"""# -*- coding: utf-8 -*-import time
import csv
from bs4 import BeautifulSoup
from selenium import webdriverclass NEW_weibo():def Login(self,id,username,password):try:print(u'登陆新浪微博手机端...')browser = webdriver.Chrome()url = 'https://passport.weibo.cn/signin/login'browser.get(url)time.sleep(3)usernameFlag = browser.find_element_by_css_selector('#loginName')time.sleep(2)usernameFlag.clear()usernameFlag.send_keys(username)passwordFlag = browser.find_element_by_css_selector('#loginPassword')time.sleep(2)passwordFlag.send_keys(password)print('# 点击登录')browser.find_element_by_css_selector('#loginAction').click()##这里给个15秒非常重要,因为在点击登录之后,新浪微博会有个九宫格验证码,下图有,通过程序执行的话会有点麻烦(可以参考崔庆才的Python书里面有解决方法),这里就手动,但是我还没遇到验证码问题time.sleep(15)except Exception as e:print(e)print('---------------登录Error---------------------')print('完成登陆!')try:print("爬取指定id微博用户信息")# id = '1195354434'# 用户的url结构为 url = 'http://weibo.cn/' + idurl = 'http://weibo.cn/' + idbrowser.get(url)time.sleep(3)# 使用BeautifulSoup解析网页的HTMLsoup = BeautifulSoup(browser.page_source, 'lxml')# 提取商户的uid信息uid = soup.find('td', attrs={'valign': 'top'})uid = uid.a['href']uid = uid.split('/')[1]# 提取最大页码数目pageSize = soup.find('div', attrs={'id': 'pagelist'})pageSize = pageSize.find('div').getText()Max_pageSize = (pageSize.split('/')[1]).split('页')[0]# 提取微博数量divMessage = soup.find('div', attrs={'class': 'tip2'})weiBoCount = divMessage.find('span').getText()weiBoCount = (weiBoCount.split('[')[1]).replace(']', '')# 提取关注数量和粉丝数量a = divMessage.find_all('a')[:2]FolloweCount = (a[0].getText().split('[')[1]).replace(']', '')FollowersCount = (a[1].getText().split('[')[1]).replace(']', '')print("微博页数:%s"%Max_pageSize)print("微博数目:%s"%weiBoCount)print("关注数目:%s"%FolloweCount)print("粉丝数目:%s"%FollowersCount)except Exception as e:print(e)# 通过循环来抓取每一页数据try:csv_file = open('./linjunjie.csv', "w", encoding='utf-8')csv_writer = csv.writer(csv_file)for i in range(1, 31):  # Max_pageSize+1# 每一页数据的url结构为 url = 'http://weibo.cn/' + id +?page=+ inew_url = url + '?page=' + str(i)browser.get(new_url)time.sleep(1)# 使用BeautifulSoup解析网页的HTMLsoup = BeautifulSoup(browser.page_source, 'lxml')body = soup.find('body')divss = body.find_all('div', attrs={'class': 'c'})[1:-2]for divs in divss:# yuanChuang : 0表示转发,1表示原创yuanChuang = '1'  # 初始值为原创,当非原创时,更改此值div = divs.find_all('div')# 这里有三种情况,两种为原创,一种为转发if (len(div) == 2):  # 原创,有图# 爬取微博内容content = div[0].find('span', attrs={'class': 'ctt'}).getText()aa = div[1].find_all('a')for a in aa:text = a.getText()try:if (('赞' in text) or ('转发' in text) or ('评论' in text)):# 爬取点赞数if ('赞' in text):likes = (text.split('[')[1]).replace(']', '')# 爬取转发数elif ('转发' in text):forward = (text.split('[')[1]).replace(']', '')# 爬取评论数目elif ('评论' in text):comments = (text.split('[')[1]).replace(']', '')# 爬取微博来源和时间span = divs.find('span', attrs={'class': 'ct'}).getText()releaseTime = str(span.split('来自')[0])tool = span.split('来自')[1]except Exception as e:print("第%s页微博出错了:%s" % (i, e))continue# 和上面一样elif (len(div) == 1):  # 原创,无图content = div[0].find('span', attrs={'class': 'ctt'}).getText()aa = div[0].find_all('a')try:for a in aa:text = a.getText()if (('赞' in text) or ('转发' in text) or ('评论' in text)):if ('赞' in text):likes = (text.split('[')[1]).replace(']', '')elif ('转发' in text):forward = (text.split('[')[1]).replace(']', '')elif ('评论' in text):comments = (text.split('[')[1]).replace(']', '')span = divs.find('span', attrs={'class': 'ct'}).getText()releaseTime = str(span.split('来自')[0])tool = span.split('来自')[1]except Exception as e:print("第%s页微博出错了:%s" % (i, e))continue# 这里为转发,其他和上面一样elif (len(div) == 3):  # 转发的微博yuanChuang = '0'content = div[0].find('span', attrs={'class': 'ctt'}).getText()aa = div[2].find_all('a')try:for a in aa:text = a.getText()if (('赞' in text) or ('转发' in text) or ('评论' in text)):if ('赞' in text):likes = (text.split('[')[1]).replace(']', '')elif ('转发' in text):forward = (text.split('[')[1]).replace(']', '')elif ('评论' in text):comments = (text.split('[')[1]).replace(']', '')span = divs.find('span', attrs={'class': 'ct'}).getText()releaseTime = str(span.split('来自')[0])tool = span.split('来自')[1]except Exception as e:print("第%s页微博出错了:%s" % (i, e))continueprint("发布时间:%s"%releaseTime)print("内容:%s"%content)weibocontent = [releaseTime,content,likes,forward,comments,tool]csv_writer.writerow(weibocontent)time.sleep(2)print("第%s页内容爬取完成"%i)finally:csv_file.close()if __name__ == '__main__':wb = NEW_weibo()username = "" #微博账号password = "" #微博密码id = '1195354434'#每个微博用户都有一个固定的id,这个是林俊杰id,如果不知道id怎么找,只要打开F12,对应的个人微博主页的url就会变化带有id了wb.Login(id,username,password)

爬取的内容保存为csv文件
在这里插入图片描述
接下来还用一种爬取微博评论内容的爬虫,具体实现方式参考《利用Python分析《庆余年》人物图谱和微博传播路径》

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

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

相关文章

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

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

黄仁勋评价股东孙正义

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

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

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

“核弹”之父——黄仁勋

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

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

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

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

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

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

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

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

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

GPT学习路线分享

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

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

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

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

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

Latex系列4---数学公式

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

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

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

数学公式识别神器Mathpix,零错误高效率

我们完成论文最费时间的可能就是公式了,尤其是对于工科学生,所以这里给大家带来了特别高效率几乎零错误的识别公式工具,这样可以节约很多的时间。博主测验,效率非常好。 官网 地址:https://mathpix.com/ 进入后&…

数学公式截图识别神器Mathpix无限使用教程

源链:数学公式截图识别神器Mathpix无限使用教程 - 哔哩哔哩点击进入查看全文>https://www.bilibili.com/read/cv8289444?fromsearch&spm_id_from333.337.0.0一、Mathpix软件注册教程 1.首先打开网址:https://accounts.mathpix.com/signup?refer…

ChatGPT驱动的虚拟试衣间,提升电子商务购物体验

随着电子商务的快速发展,线上购物已成为现代消费者的主要选择之一。然而,与线下购物相比,线上购物存在一个重要的挑战:消费者无法亲自试穿衣物。这一问题影响了许多消费者的购物决策,因为他们无法确定穿着的合适性和外…

AI硅基小助手——一个数字虚拟人化的ChatGPT类工具

自从ChatGPT发布以来,各种AIGC大模型类工具产品如汗牛充栋,参差不齐,大都是接上了ChatGPT的接口,功能几乎都一样,让人觉得乏味。 最近有一款新的名为“AI硅基小助手”的程序上线了,他基于自研的“硅基知识大…

提升16倍!Meta data2vec 2.0 性能爆表;ICML禁止大语言模型生成论文,LeCun:中小模型可以?...

本周AI界又有哪些新鲜事? 基础核心 高通推出将AD和ADAS整合的Snapdragon Ride Flex芯片 在新一年的国际消费电子展上,高通推出专门给汽车设计的处理器芯片Snapdragon Ride Flex。据了解,该芯片提供的解决方案可以将自动驾驶(AD&am…

第28课 叮叮当当 《小学生C++趣味编程》

#include<iostream> using namespace std; int main() {int i;for(i1;i<21;i){// 中有1个空格cout<<i<< ; if(i%20) cout<<"叮叮";if(i%30) cout<<"当当";if(i%20||i%30) cout<<endl; } return 0; }小…

网络编程05:我终于模拟出了QQ聊天——基础篇

本篇文章主要用UDP基础知识来模拟两人聊天 需求分析 设计一个程序&#xff0c;实现两人聊天&#xff0c;两人可以相互发信息&#xff0c;接收对方的信息&#xff0c;以及退出聊天 设计分析 一个人既可以发送信息也可以接收信息——多线程** 给这个人设置两个线程&#xff0…