沒什么可抱怨的,現在所有的一切,都是在為之前的每一次選擇買單,
人生沒有白走的路,每一步都算數,
文章目錄
- 一、schedule模塊定時執行任務
- 二、爬取微博熱搜資料
- 三、pyehcarts動態圖可視化
- 1. 基本時間輪播圖
- 2. 微博熱搜動態圖
一、schedule模塊定時執行任務
python中有一個輕量級的定時任務調度的庫:schedule,他可以完成每分鐘,每小時,每天,周幾,特定日期的定時任務,因此十分方便我們執行一些輕量級的定時任務,
# 安裝
pip install schedule -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
import schedule
import time
def run():
print("I'm doing something...")
schedule.every(10).minutes.do(run) # 每隔十分鐘執行一次任務
schedule.every().hour.do(run) # 每隔一小時執行一次任務
schedule.every().day.at("10:30").do(run) # 每天的10:30執行一次任務
schedule.every().monday.do(run) # 每周一的這個時候執行一次任務
schedule.every().wednesday.at("13:15").do(run) # 每周三13:15執行一次任務
while True:
schedule.run_pending() # run_pending:運行所有可以運行的任務
二、爬取微博熱搜資料


這樣的網頁結構可以用 pd.read_html() 方法來爬取資料
# -*- coding: UTF-8 -*-
"""
@File :微博熱搜榜.py
@Author :葉庭云
@Date :2020/9/18 15:01
"""
import schedule
import pandas as pd
from datetime import datetime
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
count = 0
def get_content():
global count # 全域變數count
print('----------- 正在爬取資料 -------------')
url = 'https://s.weibo.com/top/summary?cate=realtimehot&sudaref=s.weibo.com&display=0&retcode=6102'
df = pd.read_html(url)[0][1:11][['序號', '關鍵詞']] # 獲取熱搜前10
time_ = datetime.now().strftime("%Y/%m/%d %H:%M") # 獲取當前時間
df['序號'] = df['序號'].apply(int)
df['熱度'] = df['關鍵詞'].str.split(' ', expand=True)[1]
df['關鍵詞'] = df['關鍵詞'].str.split(' ', expand=True)[0]
df['時間'] = [time_] * len(df['序號'])
if count == 0:
df.to_csv('datas.csv', mode='a+', index=False)
count += 1
else:
df.to_csv('datas.csv', mode='a+', index=False, header=False)
# 定時爬蟲
schedule.every(1).minutes.do(get_content)
while True:
schedule.run_pending()
微博熱搜一般是1分鐘更新一次,所以再給代碼加個定時器即可,讓程式跑一會兒,微博熱搜變動資料就保存到了CSV檔案里,
三、pyehcarts動態圖可視化
1. 基本時間輪播圖
from pyecharts import options as opts
from pyecharts.charts import Bar, Timeline
from pyecharts.faker import Faker
from pyecharts.globals import CurrentConfig, ThemeType
CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
tl = Timeline(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
for i in range(2015, 2020):
bar = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts("商店{}年商品銷售額".format(i)))
)
tl.add(bar, "{}年".format(i))
tl.render("timeline_multi_axis.html")
運行效果如下:

from pyecharts import options as opts
from pyecharts.charts import Bar, Timeline
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType, CurrentConfig
CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
tl = Timeline(init_opts=opts.InitOpts(theme=ThemeType.DARK))
for i in range(2015, 2020):
bar = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values(), label_opts=opts.LabelOpts(position="right"))
.add_yaxis("商家B", Faker.values(), label_opts=opts.LabelOpts(position="right"))
.reversal_axis()
.set_global_opts(
title_opts=opts.TitleOpts("Timeline-Bar-Reversal (時間: {} 年)".format(i))
)
)
tl.add(bar, "{}年".format(i))
tl.render("timeline_bar_reversal.html")
運行效果如下:

2. 微博熱搜動態圖
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Bar, Timeline, Grid
from pyecharts.globals import ThemeType, CurrentConfig
CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
df = pd.read_csv('datas.csv')
# print(df.info())
t = Timeline(init_opts=opts.InitOpts(theme=ThemeType.MACARONS)) # 定制主題
for i in range(34):
bar = (
Bar()
.add_xaxis(list(df['關鍵詞'][i*10: i*10+10][::-1])) # x軸資料
.add_yaxis('熱度', list(df['熱度'][i*10: i*10+10][::-1])) # y軸資料
.reversal_axis() # 翻轉
.set_global_opts( # 全域配置項
title_opts=opts.TitleOpts( # 標題配置項
title=f"{list(df['時間'])[i*10]}",
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=100, # 輪播速度
is_timeline_show=False, # 是否顯示 timeline 組件
is_auto_play=True, # 是否自動播放
)
t.render('時間輪播圖.html')
運行結果如下:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/81613.html
標籤:其他
