前言💨
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
前文内容💨
Python爬虫入门教程23:A站视频的爬取,解密m3u8视频格式
Python爬虫入门教程25:绕过JS加密参数,实现批量下载抖某音无水印视频内容
Python爬虫入门教程27:爬取某电商平台数据内容并做数据可视化
PS:如有需要 Python学习资料
以及 解答
的小伙伴可以加点击下方链接自行获取
python免费学习资料以及群交流解答点击即可加入
基本开发环境💨
- Python 3.6
- Pycharm
相关模块的使用💨
import requests
import parsel
import csv
import time
安装Python并添加到环境变量,pip安装需要的相关模块即可。
💥需求数据来源分析
热搜榜数据, 每次刷新上面的热度数值都是会发生边改变,每隔一段时间可以爬取一下榜单数据,然后可以做一个数据展示。
热搜榜数据内容还是比较好爬的, 因为是静态网页数据内容, 如果大家有认真看过之前的问题,那么这个网站还是很好爬取的。
💥代码实现
每一分钟爬取一次数据内容
import requests
import parsel
import csv
import time
f = open('热榜.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
'时间',
'排名',
'标题',
'热度',
])
csv_writer.writeheader()
while True:
now_time = int(time.time())
timeArray = time.localtime(now_time)
date = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
url = 'https://s.weibo.com/top/summary?cate=realtimehot'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36',
}
response = requests.get(url=url, headers=headers)
selector = parsel.Selector(response.text)
trs = selector.css('#pl_top_realtimehot tbody tr')[:11]
for tr in trs:
num = tr.css('td.td-01.ranktop::text').get()
if num:
if num.isdigit():
title = tr.css('.td-02 a::text').get()
hot = tr.css('.td-02 span::text').get()
dit = {
'时间': date,
'排名': num,
'标题': title,
'热度': hot,
}
print(dit)
csv_writer.writerow(dit)
time.sleep(60)
💥动态数据展示
tl = Timeline()
for i in range(20):
bar = (
Bar()
.add_xaxis(list(data['标题'])[i*10:i*10+10][::-1])
.add_yaxis("微博热搜榜", list(data['热度'])[i*10:i*10+10][::-1])
.reversal_axis()
.set_global_opts(
title_opts=opts.TitleOpts("{}".format(list(data['时间'])[i*10]),pos_right='0%',pos_bottom='15%'),
xaxis_opts=opts.AxisOpts(
splitline_opts=opts.SplitLineOpts(is_show=True)),
yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True),
axislabel_opts=opts.LabelOpts(color='#FF7F50')),)
.set_series_opts(label_opts=opts.LabelOpts(position="right",color='#9400D3'))
)
grid = (
Grid()
.add(bar, grid_opts=opts.GridOpts(pos_left="25%",pos_right="0%"))
)
tl.add(grid, "{}年".format(i)) #设置标签
tl.add_schema(
play_interval=200, #播放速度
is_timeline_show=False, #是否显示 timeline 组件
is_auto_play=True,
)
tl.render_notebook()