如何用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 Mysql自动备份脚本
Jul 14 Python
Python中的FTP通信模块ftplib的用法整理
Jul 08 Python
好用的Python编辑器WingIDE的使用经验总结
Aug 31 Python
Python遍历文件夹和读写文件的实现方法
May 10 Python
Python实现学校管理系统
Jan 11 Python
Django中使用celery完成异步任务的示例代码
Jan 23 Python
python文件读写代码实例
Oct 21 Python
Django模型中字段属性choice使用说明
Mar 30 Python
Python爬虫实现vip电影下载的示例代码
Apr 20 Python
Python基于pandas绘制散点图矩阵代码实例
Jun 04 Python
用python基于appium模块开发一个自动收取能量的小助手
Sep 25 Python
Python 居然可以在 Excel 中画画你知道吗
Feb 15 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
php计算两个整数的最大公约数常用算法小结
2015/03/05 PHP
PHP错误Warning:mysql_query()解决方法
2015/10/24 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
Javascript & DHTML 实例编程(教程)DOM基础和基本API
2007/06/02 Javascript
javascript 静态对象和构造函数的使用和公私问题
2010/03/02 Javascript
情人节之礼 js项链效果
2012/02/13 Javascript
Javascript 面向对象(二)封装代码
2012/05/23 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
Jquery api 速查表分享
2015/01/12 Javascript
jquery.mobile 共同布局遇到的问题小结
2015/02/10 Javascript
javascript定时器完整实例
2015/02/10 Javascript
Javascript之深入浅出prototype
2017/02/06 Javascript
JavaScript中立即执行函数实例详解
2017/11/04 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
webpack中使用iconfont字体图标的方法
2018/02/22 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
2018/10/11 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
微信小程序 网络通信实现详解
2019/07/23 Javascript
JavaScript交换两个变量方法实例
2019/11/25 Javascript
[01:02:48]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Liquid
2018/04/03 DOTA
Python实现控制台中的进度条功能代码
2017/12/22 Python
详解Python最长公共子串和最长公共子序列的实现
2018/07/07 Python
python分布式编程实现过程解析
2019/11/08 Python
python实现飞船游戏的纵向移动
2020/04/24 Python
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
优秀研究生主要事迹
2014/06/03 职场文书
公司外出活动方案
2014/08/14 职场文书
教师党员个人整改措施材料
2014/09/16 职场文书
计算机考试作弊检讨书1000字
2015/01/01 职场文书
特岗教师个人总结
2015/02/10 职场文书
python实现求纯色彩图像的边框
2021/04/08 Python