疫情原因,因为一个学姐做毕设,需要爬微博热门话题。我就拿来练练因为正则表达式玩的不太顶,所以参考了这篇博文python 新浪微博爬虫。因为这篇博文时间太久了,所以加了一些自己的想法和改动。

一、需求分析
模拟登陆新浪微博,爬取新浪微博的热门话题版块的24小时内的前TOP100的话题名称、该话题的阅读数、讨论数、粉丝数、话题主持人,以及对应话题主持人的关注数、粉丝数和微博数。

二、开发语言
python3.6

三、需要导入模块
import requests
import re
import sys
import time
from pyquery import PyQuery as pq
from lxml import etree
import json
import pandas as pd

四、抓取流程
发送请求得到网页源代码数据
之后用正则表达式解析数据

五、字段说明

话题名称:topic_name
阅读数:topic_reading
讨论数:topic_discuss
话题粉丝数:topic_fans
话题主持人:host_name
主持人关注数:host_follow
主持人粉丝数:host_fans
主持人微博数:host_weibo

代码:

import requests
import re
import sys
import time
from pyquery import PyQuery as pq
from lxml import etree
import json
import pandas as pdglobal false, null, true
false = null = true = ''
top_name = [] #话题名
top_reading = []#阅读数
top_rank=[]#排名
top_subtitle=[]#标题命
top_fans = []#话题参与人数
host_name = []#发起者名字
host_follow = []#发起者关注
host_fans = []#话题者粉丝
host_weibo = []#话题者微博数def get_one_page(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36','Cookie':'UOR=www.xueshanlinghu.com,widget.weibo.com,www.xueshanlinghu.com; SUB=_2AkMpIlvAf8PxqwJRmPoRz2_lbY9yywvEieKffqobJRMxHRl-yT92qnU6tRB6AqJ1Ja0OS_Z4Sle1i9PePn9Y2j3r002F; SUBP=0033WrSXqPxfM72-Ws9jqgMF55529P9D9WhMbmKIeS44Ywv2JBYP3dlp; login_sid_t=20e3745b135ada171ade3f91a392cf1f; cross_origin_proto=SSL; _s_tentry=passport.weibo.com; Apache=2694303126421.087.1585370372866; SINAGLOBAL=2694303126421.087.1585370372866; ULV=1585370372875:1:1:1:2694303126421.087.1585370372866:; YF-Page-G0=b1c63e15d8892cdaefd40245204f0e21|1585372515|1585372320'}response = requests.get(url,headers=headers,verify=False)if response.status_code == 200:response.encoding='UTF-8'return response.textreturn Nonedef analysis(topic):topicrank = re.search('<span class="(?:DSC_topicon_red|DSC_topicon|DSC_topicon_orange)">(.*?)</span>', topic, re.S)if topicrank is None:top_rank.append('')else:top_rank.append(topicrank.group(1))topicname= re.search('alt="(.*?)" class="pic">', topic, re.S)if topicname is None:top_name.append('')else:top_name.append(topicname.group(1))subtitle = re.search('class="subtitle">(.*?)</div>', topic, re.S)if subtitle is None:top_subtitle.append('')else:top_subtitle.append(subtitle.group(1))readingcount = re.search('<span class="number">(.*?) </span>',topic, re.S)if readingcount is None:top_reading.append('')else:top_reading.append(readingcount.group(1))ppname=re.search('class="tlink S_txt1"[\s]+>(.*?)</a></div>',topic,re.S)if ppname is None:host_name.append('')host_follow.append('')host_fans.append('')host_weibo.append('')else:host_name.append(ppname.group(1))aboutzcr = re.search('主持人:<span><a target="_blank" href="[^0-9]+(.*?)\?', topic,re.S)if aboutzcr is not None:pp1 = "http://m.weibo.cn/api/container/getIndex?type=uid&value=" + str(aboutzcr.group(1))r = requests.get(pp1)if r.status_code==200:html3 =r.texthtml4 = json.dumps(html3)content = json.loads(html4)jsoncontent = eval(content)userInfo = jsoncontent['data']['userInfo']statuses_count = userInfo['statuses_count']followers_count = userInfo['followers_count']follow_count = userInfo['follow_count']host_follow.append(follow_count)host_fans.append(followers_count)host_weibo.append(statuses_count)   else:host_follow.append('')host_fans.append('')host_weibo.append('')return
def savetoexcel():print(len(top_name), len(top_rank), len(top_subtitle), len(top_reading), len(host_name),len(host_follow),len(host_fans),len(host_weibo))count=top_name.__len__()print(count)dfl = pd.DataFrame(data={'top_name': top_name[0:count], 'top_rank': top_rank[0:count], 'top_subtitle': top_subtitle[0:count],'top_reading': top_reading[0:count], 'host_name': host_name[0:count],'host_follow':host_follow[0:count],'host_fan':host_fans[0:count],'host_weibpo':host_weibo[0:count]})writer = pd.ExcelWriter(r'D:\\sina_weibo_topic50024.xlsx', engine='xlsxwriter',options={'strings_to_urls': False})dfl.to_excel(writer, columns=['top_name','top_rank','top_subtitle','top_reading','host_name','host_follow','host_fan','host_weibpo'],index=False)writer.close()returndef main():for i in range(1,8):print("正在抓取第"+str(i)+"页")url = "https://d.weibo.com/231650?cfs=920&Pl_Discover_Pt6Rank__3_filter=&Pl_Discover_Pt6Rank__3_page="+str(i)+"#Pl_Discover_Pt6Rank__3"html = get_one_page(url)handlepage=str(html).replace('\\t', "").replace('\\n', '').replace('\\', '').replace('#', '')topic=handlepage.split("pt_li S_line2")topic.pop(0)for each in topic:analysis(each)time.sleep(0.5)savetoexcel()main()

最后附上结果图:

【python 新浪微博爬虫】python 爬取新浪微博热门话题相关推荐

  1. python爬取新浪微博内容_python新浪微博爬虫,爬取微博和用户信息 (含源码及示例)...

    [实例简介] 这是新浪微博爬虫,采用python+selenium实现. 免费资源,希望对你有所帮助,虽然是傻瓜式爬虫,但是至少能运行.同时rar中包括源码及爬取的示例. 参考我的文章: http:/ ...

  2. python——图片爬虫:爬取爱女神网站(www.znzhi.net)上的妹子图 进阶篇

    在上一篇博客中:python--图片爬虫:爬取爱女神网站(www.znzhi.net)上的妹子图 基础篇 我讲解了图片爬虫的基本步骤,并实现了爬虫代码 在本篇中,我将带领大家对基础篇中的代码进行改善, ...

  3. Python Scrapy爬虫框架爬取51job职位信息并保存至数据库

    Python Scrapy爬虫框架爬取51job职位信息并保存至数据库 -------------------------------- 版权声明:本文为CSDN博主「杠精运动员」的原创文章,遵循CC ...

  4. 【Python】爬虫实例——爬取新闻并实现语音播报

    [Python]爬虫实例--爬取新闻并实现语音播报 本文涉及: 1.爬虫请求链接 2.文字转语音(TTS语音合成技术) 安装: pip install pyttsx3 pip install requ ...

  5. python +selenium+phantomjs 登录爬取新浪微博动态js页面

    登录新浪微博 最近新浪微博好烦,都取消不了验证码这个难搞得东西,而且跳来跳去,一改版以前的代码就都不能用了.目前整理的资料有三种方法: 1. 设Cookie:简单粗暴,免去了模拟登录的好多麻烦,只是要 ...

  6. Python Scrapy 爬虫框架爬取推特信息及数据持久化!整理了我三天!

    最近要做一个国内外新冠疫情的热点信息的收集系统,所以,需要爬取推特上的一些数据,然后做数据分类及情绪分析.作为一名合格的程序员,我们要有「拿来主义精神」,借助别人的轮子来实现自己的项目,而不是从头搭建 ...

  7. 【Python爬虫】爬取新浪微博评论看网友如何评价NBA季后赛火箭VS爵士G3

    网友如何评论NBA季后赛火箭VS爵士G3 爬取网友评论 首先我们找到一篇关于比赛的微博 生成词云图 我们看看关键的几个人物:哈登,米切尔,塔克,徐坤(乱入?) 哈登 莫非今天又是常规操作30+?MVP ...

  8. python新浪微博数据分析_Python 爬取新浪微博数据分析90后单身原因

    一.需求背景 今天逛微博的时候发现一个有趣的话题#90后单身原因TOP3# 七夕之际,一份针对全国90后青年婚恋观进行抽样调查公布了结果.结果显示,一线城市单身占比持续领先.90后单身原因TOP3:圈 ...

  9. 【爬虫实战】10应用Python网络爬虫——定向爬取百度百科文字

    python百度百科爬虫 网页源代码分析 编程实现 小结 网页源代码分析 首先找一下需要爬取的正文: 对应的源代码有两个地方: 上图往后翻会发现省略号,所以下面这张图才是我们需要爬取的部分: 编程实现 ...

  10. Python网络爬虫之爬取微博热搜

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

最新文章

  1. Office 2010 64位版本
  2. Dapper基础知识一
  3. OpenJudge 2739 计算对数
  4. TCP窗口大小的利与弊转载自
  5. 互联网公司忽悠员工的黑话,套路太深了。。。
  6. 20190821:(leetcode习题)验证回文字符串
  7. 计算机网络—UDP协议
  8. OpenCV 文字绘制——cv::putText详解
  9. c语言指向读取的字节数的指针,c - C语言中指针的大小 - SO中文参考 - www.soinside.com...
  10. MATLAB:简单GUI的设计流程
  11. 张益唐朗道-西格尔零点猜想报告:“部分地解决黎曼假设应该是对的”
  12. PS中的颜色深度1位8位16位32位的解释
  13. 使用FFMpeg 提取MKV文件中的字幕
  14. keras上运行Tensorflow-gpu的艰难历程(最新版,更新中)
  15. KGB知识图谱技术能够解决哪些行业痛点?
  16. citus介绍和centos7安装部署和集群搭建
  17. XV6 swtch.S详解
  18. FreeRTOS临界段的保护
  19. python数据分析:会员数据化运营(中)——RMF分析
  20. Qt笔记(五十七)之显示图片缩略图

热门文章

  1. Qt交叉编译移植arm开发板
  2. 旧梦一场用计算机怎么表示,歌曲旧梦一场表达什么意思?
  3. 读《天才在左,疯子在右》03--灵魂深处
  4. MyBatis是如何自动装配的
  5. android谷歌地图v2开发,android google map v2开发环境配置教程
  6. 如果能重来,我不会选择北漂——初见北京
  7. java 加减乘除_Java实现加减乘除 | 学步园
  8. 李开复就中国移动开发者大会的演讲总结
  9. Android Studio 报错 : Cause : zip file is empty
  10. 几何公差基础知识之圆柱度