当前位置: 首页 > news >正文

用Python打造你的微博热搜追踪器

简介

在当今信息爆炸的时代,获取最新、最热门的信息成为了许多人的日常需求。微博热搜榜作为反映社会热点和公众关注焦点的重要窗口,其信息价值不言而喻。本文将介绍一个实用的Python爬虫程序,它能够自动爬取微博热搜榜的信息,并通过邮件的形式将这些信息发送给用户,帮助用户及时了解社会动态,把握热点趋势。

总体介绍

本博客文章将详细介绍一个关于微博热搜榜简单爬虫程序。该程序的主要功能是自动获取微博热搜榜上的信息,并将这些信息通过邮件发送给用户。程序使用了以下模块:

  • requests:用于发送HTTP请求,获取网页内容。
  • BeautifulSoup:用于解析HTML网页,方便提取所需信息。
  • smtplib:用于发送邮件。
  • email.utils 和 email.mime.text:用于构建邮件的各个部分。

程序中定义了三个主要函数:

  • page_request(url, header):发送HTTP请求,获取网页内容,并返回HTML代码。
  • page_parse(html):解析HTML代码,提取热搜信息,并调用email_set()函数发送邮件。
  • email_set(data):构建邮件的各个部分,并发送邮件。

此外,程序还包含一个job()函数,它负责调用page_request()和page_parse()函数,实现整个爬取和邮件发送的流程。

完整代码:

# 爬虫相关模块
import requests
from bs4 import BeautifulSoupimport smtplib
import email.utils
from email.mime.text import MIMETextimport time# 请求网页
def page_request(url, header):response = requests.get(url=url, headers=header)html = response.content.decode("UTF-8")return html# 解析网页
def page_parse(html):soup = BeautifulSoup(html, 'html.parser')news = []# 处理热搜前50urls_title = 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_title)):new = {}title = urls_title[i].get_text()url = urls_title[i].get('href')# 个别链接会出现异常if url == 'javascript:void(0);':url = urls_title[i].get('href_to')# 热搜top没有显示热度if i == 0:hot = 'top'else:hot = hotness[i - 1].get_text()new['title'] = titlenew['url'] = "https://s.weibo.com" + urlnew['hot'] = hotnews.append(new)print(len(news))for element in news:print("新闻: "+element['title'] + '\t热度: ' + element['hot'] + '\t网址: ' + element['url'])# 发送邮件email_set(news)def email_set(data):text =""no=1for element in data:text+=str(no)+" 新闻: "+element['title'] + '\n热度: ' + element['hot'] + '\n网址: ' + element['url']+"\n\n"no+=1subject = '微博热搜榜'+str(time.time())message = MIMEText(text)message['To'] = email.utils.formataddr(('02', ''))message['From'] = email.utils.formataddr(('01', ''))message['Subject'] = subjectserver = smtplib.SMTP_SSL('smtp.qq.com', 465)server.login('', 'yrbqcwfhlcvucjcj')server.set_debuglevel(True)try:server.sendmail('', [''], msg=message.as_string())print("发送成功\n\n")except:print("发送失败")finally:server.quit()def job():print('开始爬取微博热搜')header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'zh-CN,zh-Hans;q=0.9','Accept-Encoding': 'gzip, deflate, br','Cookie': ""}url = 'https://s.weibo.com/top/summary'html = page_request(url=url, header=header)page_parse(html)if __name__ == "__main__":while True:job()time.sleep(20)

函数解析

page_parse 函数

page_parse()函数负责解析网页,提取微博热搜数据。它使用BeautifulSoup处理HTML,筛选出新闻标题、链接和热度,并将这些信息存储在列表中。之后,该函数打印出每条新闻的详细信息,并调用email_set()函数发送邮件。

email_set 函数

email_set()函数用于创建并发送邮件。它接收一个包含热搜数据的列表,构建邮件正文,设置邮件头部信息(如发件人、收件人、主题),并通过SMTP服务器发送邮件。

job 函数

job()函数作为程序的入口点,负责启动爬虫流程。它首先打印开始爬取的提示,然后获取目标网页内容,解析出热搜数据,并触发邮件发送过程。

特别注意

重要提醒: 本代码示例完成于2022年,随着微博平台的产品迭代和反爬策略的更新,原有的爬虫代码可能已经无法正常运行。因此,本代码仅供学习和参考之用,不保证其在当前环境下的功能性。

学习目的

尽管代码可能已不再适用,但它提供了一个很好的学习机会,让您了解如何使用Python进行网页爬取、数据解析和邮件发送。以下是代码的关键学习点:

  1. HTTP请求:如何使用requests库发送HTTP请求,获取网页内容。
  2. HTML解析:利用BeautifulSoup库解析HTML文档,提取所需数据。
  3. 邮件发送:通过smtplib和email.mime.text构建和发送邮件。
  4. 函数封装:学习如何将功能模块化,通过函数实现代码的重用和组织。

更新建议

如果您希望更新代码以适应当前的微博平台,可能需要考虑以下方面:

  • 检查微博API:研究是否有可用的微博API接口,使用API获取数据通常比直接爬取更为稳定和合法。
  • 更新选择器:由于网页结构可能发生变化,需要更新BeautifulSoup的选择器以匹配新的HTML元素。
  • 反爬策略:了解并应对微博可能采取的反爬虫措施,如设置合适的请求头、使用代理等。
  • 邮件服务器配置:根据您使用的邮件服务提供商,可能需要更新SMTP服务器的配置信息。

作者:冷月半明
链接:https://juejin.cn/post/7375504338759385126

http://www.lryc.cn/news/362703.html

相关文章:

  • TypeScript 在前端开发中的应用
  • 【ArcGIS微课1000例】0115:字段数据类型案例详解
  • ABC318-D
  • Java实现线程安全的单例模式
  • osg库的下载和安装
  • HTML、ASP.NET、XML、Javascript、DIV+CSS、JQuery、AJax的起源与简介
  • SpringCloud微服务远程接口调用
  • MySQL优化器的SQL重写规则
  • 57.void指针(万能指针)
  • 国科大-智能计算系统(AICS)期末试题(2024春)
  • 训练Pytorch深度学习模型出现StopIteration
  • windows上安装MongoDB,springboot整合MongoDB
  • python_04
  • 音视频视频点播
  • Git常用命令1
  • Nextjs使用教程
  • mysql的增删查改(进阶)
  • 九、从0开始卷出一个新项目之瑞萨RZN2L生产烧录固件(jflash擦写读外挂flash)
  • 安徽某高校数据挖掘作业4-5 (与一些碎碎念)
  • 基于ES安装IK分词插件
  • php项目加密源码
  • 测绘GIS和遥感领域比较好的公众号有哪些
  • 【技术实操】银河高级服务器操作系统实例分享,达梦数据库服务器 oom 问题分析
  • 通过ffmpeg 将wav格式转为mp3格式.
  • 快速上手RabbitMQ,直接上开发!
  • 如何实现单例模式及不同实现方法分析-设计模式
  • wampserver安装与汉化
  • 解决MyBatis的N+1问题
  • 12-学生们参加各科测试的次数(高频 SQL 50 题基础版)
  • 2024网络与信息安全管理员职工职业技能竞赛re0220164094