Q:想要记录实时的微博热搜分析某一类事件的热度怎么办?
A: 采用python爬虫24小时不间断爬取微博热搜并存储到本地。
代码如下:
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 18 14:48:24 2021
@author: Administrator
"""
#文件目的是每隔一段时间爬微博热搜并存储在本地
import requests
from bs4 import BeautifulSoup
import time
import pandas as pd
import os
hot_url = 'https://s.weibo.com/top/summary/'
# 热搜榜链接
folderPath = r'C:/Users/Administrator/Desktop/weibo_hotness'
#文件存储目录
if os.path.exists(folderPath):
pass
else:
os.mkdir(folderPath)
#建立文件夹
columns = []
for i in range(50):
columns.append('hot_text%s'%i)
columns.append('hot_number%s'%i)
#建立存储DataFrame的列名,分别是热搜文本和热度
if __name__ == "__main__":
pre_date = '20000101'
#初始化一个前一日期
while 1:
try:
current_date = time.strftime("%Y%m%d", time.localtime())
#当前日期
filePath = folderPath + '/%s.csv'%current_date
#文件存储位置
if current_date == pre_date:
pass
else:
today_data = pd.DataFrame(columns=columns)
#将今天所有的数据初始化一个DataFrame
now_localtime = time.strftime("%H%M", time.localtime())
#现在时间,精确到分
if int(now_localtime)%5 == 0:
#每5分钟执行一次
news = []
# 新建数组临时存放热搜榜
r = requests.get(hot_url)
# 向链接发送get请求获得页面
soup = BeautifulSoup(r.text, 'lxml')
# 解析页面
urls_titles = soup.select('#pl_top_realtimehot > table > tbody > tr > td.td-02 > a')
hotness = soup.select('#pl_top_realtimehot > table > tbody > tr > td.td-02 > span')
#获取文本和热度
for i in range(len(urls_titles)-1):
title = urls_titles[i+1].get_text()
# get_text()获得a标签的文本
news.append(title)
hotness_number = hotness[i].get_text()
# 获得热度文本
news.append(hotness_number)
# 数据添加到临时存储数组中
today_data.loc[now_localtime] = news
#将数组添加到DataFrame中
if os.path.isfile(filePath):
os.remove(filePath)
#删除原有文件
else:
pass
today_data.to_csv(filePath)
#写入硬盘
time.sleep(200)
else:
time.sleep(20)
pre_date = current_date
#改变前一日期
except:
time.sleep(5)
Q:以上就实现了python爬取微博热搜,但是要如何24小时不间断爬取呢?
A:将代码打包成exe文件放在云服务器上运行。
打包方法:
首先需要将.py文件后缀改为.pyw,这样程序运行时就不会有窗口产生,而是直接在后台运行
安装pyinstaller
pip install pyinstaller
打开anaconda自带的Anaconda Prompt,将目录移动到.pyw文件存储文件夹
cd C:\Users\Administrator\Desktop\weibo_hotness
执行打包程序
pyinstaller -F 文件名(带文件扩展名)
打包完成后生成的dist文件夹下就会有对应的exe文件了,将其发送到云服务器上就可以24小时不间断运行
参考文献:参考文献
本人中部某基科在读研究生,欢迎对量化交易和python或研究生生活感兴趣的同学关注我的个人微信公众号。