如何用python爬取微博热搜数据并保存


Posted in Python onFebruary 20, 2021

主要用到requests和bf4两个库
将获得的信息保存在d://hotsearch.txt下

import requests;
import bs4
mylist=[]
r = requests.get(url='https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&wvr=6',timeout=10)
print(r.status_code) # 获取返回状态
r.encoding=r.apparent_encoding
demo = r.text
from bs4 import BeautifulSoup
soup = BeautifulSoup(demo,"html.parser")
for link in soup.find('tbody') :
 hotnumber=''
 if isinstance(link,bs4.element.Tag):
#  print(link('td'))
  lis=link('td')
  hotrank=lis[1]('a')[0].string#热搜排名
  hotname=lis[1].find('span')#热搜名称
  if isinstance(hotname,bs4.element.Tag):
   hotnumber=hotname.string#热搜指数
   pass
  mylist.append([lis[0].string,hotrank,hotnumber,lis[2].string])
f=open("d://hotsearch.txt","w+")
for line in mylist:
 f.write('%s %s %s %s\n'%(line[0],line[1],line[2],line[3]))

如何用python爬取微博热搜数据并保存

知识点扩展:利用python爬取微博热搜并进行数据分析

爬取微博热搜

import schedule
import pandas as pd
from datetime import datetime
import requests
from bs4 import BeautifulSoup

url = "https://s.weibo.com/top/summary?cate=realtimehot&sudaref=s.weibo.com&display=0&retcode=6102"
get_info_dict = {}
count = 0

def main():
  global url, get_info_dict, count
  get_info_list = []
  print("正在爬取数据~~~")
  html = requests.get(url).text
  soup = BeautifulSoup(html, 'lxml')
  for tr in soup.find_all(name='tr', class_=''):
    get_info = get_info_dict.copy()
    get_info['title'] = tr.find(class_='td-02').find(name='a').text
    try:
      get_info['num'] = eval(tr.find(class_='td-02').find(name='span').text)
    except AttributeError:
      get_info['num'] = None
    get_info['time'] = datetime.now().strftime("%Y/%m/%d %H:%M")
    get_info_list.append(get_info)
  get_info_list = get_info_list[1:16]
  df = pd.DataFrame(get_info_list)
  if count == 0:
    df.to_csv('datas.csv', mode='a+', index=False, encoding='gbk')
    count += 1
  else:
    df.to_csv('datas.csv', mode='a+', index=False, header=False, encoding='gbk')

# 定时爬虫
schedule.every(1).minutes.do(main)

while True:
  schedule.run_pending()

pyecharts数据分析

import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Bar, Timeline, Grid
from pyecharts.globals import ThemeType, CurrentConfig

df = pd.read_csv('datas.csv', encoding='gbk')
print(df)
t = Timeline(init_opts=opts.InitOpts(theme=ThemeType.MACARONS)) # 定制主题
for i in range(int(df.shape[0]/15)):
  bar = (
    Bar()
      .add_xaxis(list(df['title'][i*15: i*15+15][::-1])) # x轴数据
      .add_yaxis('num', list(df['num'][i*15: i*15+15][::-1])) # y轴数据
      .reversal_axis() # 翻转
      .set_global_opts( # 全局配置项
      title_opts=opts.TitleOpts( # 标题配置项
        title=f"{list(df['time'])[i * 15]}",
        pos_right="5%", pos_bottom="15%",
        title_textstyle_opts=opts.TextStyleOpts(
          font_family='KaiTi', font_size=24, color='#FF1493'
        )
      ),
      xaxis_opts=opts.AxisOpts( # x轴配置项
        splitline_opts=opts.SplitLineOpts(is_show=True),
      ),
      yaxis_opts=opts.AxisOpts( # y轴配置项
        splitline_opts=opts.SplitLineOpts(is_show=True),
        axislabel_opts=opts.LabelOpts(color='#DC143C')
      )
    )
      .set_series_opts( # 系列配置项
      label_opts=opts.LabelOpts( # 标签配置
        position="right", color='#9400D3')
    )
  )
  grid = (
    Grid()
      .add(bar, grid_opts=opts.GridOpts(pos_left="24%"))
  )
  t.add(grid, "")
  t.add_schema(
    play_interval=1000, # 轮播速度
    is_timeline_show=False, # 是否显示 timeline 组件
    is_auto_play=True, # 是否自动播放
  )

t.render('时间轮播图.html')

到此这篇关于如何用python爬取微博热搜数据并保存的文章就介绍到这了,更多相关python爬取微博热搜数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python通过邮件服务器端口发送邮件的方法
Apr 30 Python
KMP算法精解及其Python版的代码示例
Jun 01 Python
matplotlib 纵坐标轴显示数据值的实例
May 25 Python
python判断数字是否是超级素数幂
Sep 27 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
Dec 15 Python
python实现代码统计器
Sep 19 Python
python 读写文件包含多种编码格式的解决方式
Dec 20 Python
Python图像处理库PIL的ImageFilter模块使用介绍
Feb 26 Python
基于python图像处理API的使用示例
Apr 03 Python
Python读取Excel一列并计算所有对象出现次数的方法
Sep 04 Python
python实现磁盘日志清理的示例
Nov 05 Python
Matplotlib绘制条形图的方法你知道吗
Mar 21 Python
python 统计list中各个元素出现的次数的几种方法
Feb 20 #Python
pandas统计重复值次数的方法实现
Feb 20 #Python
pandas 按日期范围筛选数据的实现
Feb 20 #Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
Feb 20 #Python
pandas按条件筛选数据的实现
Feb 20 #Python
python实现b站直播自动发送弹幕功能
Feb 20 #Python
如何用 Python 制作 GitHub 消息助手
Feb 20 #Python
You might like
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
简单说说PHP优化那些事(经验分享)
2014/11/27 PHP
使用PHP免费发送定时短信的实例
2016/10/24 PHP
理解JavaScript中的事件
2006/09/23 Javascript
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
19个很有用的 JavaScript库推荐
2011/06/27 Javascript
如何从jQuery的ajax请求中删除X-Requested-With
2013/12/11 Javascript
用jQuery模拟select下拉框的简单示例代码
2014/01/26 Javascript
js在指定位置增加节点函数insertBefore()用法实例
2015/01/12 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
javascript实现显示和隐藏div方法汇总
2015/08/14 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
es6的数字处理的方法(5个)
2017/03/16 Javascript
vue.js 获取当前自定义属性值
2017/06/01 Javascript
20行JS代码实现网页刮刮乐效果
2017/06/23 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
用Webpack构建Vue项目的实践
2017/11/07 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
Javascript中弹窗confirm与prompt的区别
2018/10/26 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
2019/03/07 Javascript
nodejs读取图片返回给浏览器显示
2019/07/25 NodeJs
[01:28:24]NAVI vs VG Supermajor 败者组 BO3 第三场 6.5
2018/06/06 DOTA
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
Python编程修改MP3文件名称的方法
2017/04/19 Python
python3 enum模块的应用实例详解
2019/08/12 Python
pytorch:torch.mm()和torch.matmul()的使用
2019/12/27 Python
python如何把字符串类型list转换成list
2020/02/18 Python
使用PyCharm安装pytest及requests的问题
2020/07/31 Python
HTML5图片层叠的实现示例
2020/07/07 HTML / CSS
iostream与iostream.h的区别
2015/01/16 面试题
四年的大学生生活自我评价
2013/12/09 职场文书
唐山大地震观后感
2015/06/05 职场文书
执行力心得体会范文
2016/01/11 职场文书
2016教师廉洁从教心得体会
2016/01/13 职场文书
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers