如何用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支持断点续传的多线程下载示例
Jan 16 Python
Python基础之函数用法实例详解
Sep 10 Python
使用Python生成随机密码的示例分享
Feb 18 Python
使用Python机器学习降低静态日志噪声
Sep 29 Python
django admin组件使用方法详解
Jul 19 Python
在vscode中配置python环境过程解析
Sep 28 Python
使用Python函数进行模块化的实现
Nov 15 Python
python tornado使用流生成图片的例子
Nov 18 Python
Python urlencode和unquote函数使用实例解析
Mar 31 Python
Django mysqlclient安装和使用详解
Sep 17 Python
python生成xml时规定dtd实例方法
Sep 21 Python
Anaconda安装pytorch及配置PyCharm 2021环境
Jun 04 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
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
PHP下载大文件失败并限制下载速度的实例代码
2019/05/10 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
JS 控制CSS样式表
2009/08/20 Javascript
extjs 为某个事件设置拦截器
2010/01/15 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
移动节点的jquery代码
2014/01/13 Javascript
原生JavaScript生成GUID的实现示例
2014/09/05 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/10/05 Javascript
jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
2016/10/24 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
基于Python __dict__与dir()的区别详解
2017/10/30 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
基于windows下pip安装python模块时报错总结
2018/06/12 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
一个可以套路别人的python小程序实例代码
2019/04/09 Python
Python closure闭包解释及其注意点详解
2019/08/28 Python
Python使用sqlite3模块内置数据库
2020/05/07 Python
Python request中文乱码问题解决方案
2020/09/17 Python
使用AJAX和Django获取数据的方法实例
2020/10/25 Python
高中生自我评价个人范文
2013/11/09 职场文书
高中毕业自我鉴定
2013/12/19 职场文书
经典婚礼主持开场白
2014/03/13 职场文书
给老婆的道歉信
2015/01/20 职场文书
生日祝酒词大全
2015/08/10 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书
详解JavaScript中的执行上下文及调用堆栈
2021/04/29 Javascript
APP界面设计技巧和注意事项
2022/04/29 杂记
Redis唯一ID生成器的实现
2022/07/07 Redis
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技