如何用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提示No module named images的解决方法
Sep 29 Python
在Python上基于Markov链生成伪随机文本的教程
Apr 17 Python
Python使用正则表达式抓取网页图片的方法示例
Apr 21 Python
使用tensorflow实现AlexNet
Nov 20 Python
Python实现对特定列表进行从小到大排序操作示例
Feb 11 Python
pytorch 求网络模型参数实例
Dec 30 Python
Tensorflow实现将标签变为one-hot形式
May 22 Python
详解Python中的编码问题(encoding与decode、str与bytes)
Sep 30 Python
Python实现JS解密并爬取某音漫客网站
Oct 23 Python
Python datetime模块的使用示例
Feb 02 Python
解决pytorch-gpu 安装失败的记录
May 24 Python
利用Python实现Picgo图床工具
Nov 23 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基础知识:类与对象(1)
2006/12/13 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
解析php二分法查找数组是否包含某一元素
2013/05/23 PHP
如何使用PHP计算上一个月的今天
2013/05/23 PHP
php随机取mysql记录方法小结
2014/12/27 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
2017/02/04 PHP
Laravel Eloquent ORM 多条件查询的例子
2019/10/10 PHP
JavaScript中的null和undefined解析
2012/04/14 Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
2012/12/17 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
PHP7新特性简述
2017/06/11 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
解决vue.js this.$router.push无效的问题
2018/09/03 Javascript
js实现带箭头的进度流程
2020/03/26 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
2020/12/08 Vue.js
python文件与目录操作实例详解
2016/02/22 Python
详解Python装饰器由浅入深
2016/12/09 Python
python使用循环打印所有三位数水仙花数的实例
2018/11/13 Python
python通过移动端访问查看电脑界面
2020/01/06 Python
Python表达式的优先级详解
2020/02/18 Python
Python 解析xml文件的示例
2020/09/29 Python
利用CSS3的transform做的动态时钟效果
2011/09/21 HTML / CSS
Coccinelle官网:意大利的著名皮具品牌
2019/05/15 全球购物
思想汇报格式
2014/01/05 职场文书
2014年3.15团委活动总结
2014/03/16 职场文书
团支部建设方案
2014/05/02 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
2014年感恩节活动策划方案
2014/10/06 职场文书
面试通知短信
2015/04/20 职场文书
2015年公务员转正工作总结
2015/04/24 职场文书
创业计划书之美容店
2019/09/16 职场文书