访问微博热搜榜,获取微博热搜榜前50条热搜名称、链接及其实时热度,并将获取到的数据以邮件的形式发送,每20秒一次发送到个人邮箱中。

本文主要是介绍访问微博热搜榜,获取微博热搜榜前50条热搜名称、链接及其实时热度,并将获取到的数据以邮件的形式发送,每20秒一次发送到个人邮箱中。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、需求

访问微博热搜榜(Sina Visitor System),获取微博热搜榜前50条热搜名称、链接及其实时热度,并将获取到的数据通过邮件的形式,每20秒发送到个人邮箱中。

注意事项:

  1. 定义请求头

本实验需要获取User-Agent、Accept、Accept-Language、Cookie四个字段,前三个字段可能都是相同的,主要是Cookie不同。具体获取流程如下:

 打开目标网页,本实验目标网页为Sina Visitor System

按键盘上面F12进入开发者模式,此时页面如下:

 按键盘上面F5刷新页面,此时开发者模式中会有网页相关信息,页面如下:

依次点击Network、All、以及summary(即目标链接的地址),各个位置如下图所示:

点击summary后出现右侧窗口,点击Header能够得到相关报文字段,如下图所示:

cookie获取

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','Cookie':#填上自己的}url = 'https://s.weibo.com/top/summary'html = page_request(url=url, header=header)page_parse(html)

邮件发送程序。

以网易邮箱为例,开通自己的授权码,QQ邮箱同理。

登录自己的网易邮箱

会生成一个授权码,你把那个授权码填到代码里就可以了。

class Email163(object):HOST = 'smtp.qq.com'#网易邮箱是 smtp.163.comPORT = '25'#默认的不用改PASSWORD = 'XXXXXXXXX'填写自己的授权码FROM_ADDR = 'XXX@qq.com'#填上自己的邮箱SUBTYPE_PLAIN = 'plain'SUBTYPE_HTML = 'html'ATTACHMENT = 'attachment'EMBEDDED = 'embedded'def __init__(self, body: str, to_addrs: str) -> None:msg = MIMEText(body, self.SUBTYPE_PLAIN, 'utf-8')msg['From'] = self.FROM_ADDRmsg['To'] = to_addrs# 设置邮件的格式以及发送主题msg['subject'] = Header('微博热搜', 'utf-8')self.msg = msg.as_string()self.to_addrs = to_addrsdef send_default_email(self) -> None:try:smtp = smtplib.SMTP()smtp.connect(self.HOST, self.PORT)smtp.login(self.FROM_ADDR, self.PASSWORD)smtp.sendmail(self.FROM_ADDR, self.to_addrs, self.msg)smtp.close()print(f'邮件成功发送给:{self.to_addrs}')except smtplib.SMTPException:raise Exception(f'给{self.to_addrs}发送邮件失败')

完整代码

# 爬虫相关模块
from bs4 import BeautifulSoup
# 发送邮箱相关模块
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import urllib.request
# 定时模块
import schedule
import time
# 请求网页
import urllib.request
import gzip
class Email163(object):HOST = 'smtp.163.com'PORT = '25'PASSWORD = 'XXXXXXXXXXX'#授权码FROM_ADDR = '自己的邮箱'#填自己的SUBTYPE_PLAIN = 'plain'SUBTYPE_HTML = 'html'ATTACHMENT = 'attachment'EMBEDDED = 'embedded'def __init__(self, body: str, to_addrs: str) -> None:msg = MIMEText(body, self.SUBTYPE_PLAIN, 'utf-8')msg['From'] = self.FROM_ADDRmsg['To'] = to_addrs# 设置邮件的格式以及发送主题msg['subject'] = Header('微博热搜', 'utf-8')self.msg = msg.as_string()self.to_addrs = to_addrsdef send_default_email(self) -> None:try:smtp = smtplib.SMTP()smtp.connect(self.HOST, self.PORT)smtp.login(self.FROM_ADDR, self.PASSWORD)smtp.sendmail(self.FROM_ADDR, self.to_addrs, self.msg)smtp.close()print(f'邮件成功发送给:{self.to_addrs}')except smtplib.SMTPException:raise Exception(f'给{self.to_addrs}发送邮件失败')
def page_request(url, header):request = urllib.request.Request(url, headers=header)html = ''try:response = urllib.request.urlopen(request)if response.info().get('Content-Encoding') == 'gzip':# 如果响应使用gzip压缩,则解压缩数据compressed_data = response.read()decompressed_data = gzip.decompress(compressed_data)html = decompressed_data.decode('utf-8')else:html = response.read().decode('utf-8')except urllib.error.URLError as e:if hasattr(e, 'code'):print(e.code)if hasattr(e, 'reason'):print(e.reason)return html
# 解析网页
def page_parse(html):soup = BeautifulSoup(html, 'lxml')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))print(news)for element in news:print(element['title'] + '\t' + element['hot'] + '\t' + element['url'])content = ''for i in range(len(news)):content += str(i) + '、\t' + news[i]['title'] + '\t' + '热度:' + news[i]['hot'] + '\t' + '链接:' + news[i]['url'] + ' \n'get_time = time.strftime('%Y-%m-%d %X', time.localtime(time.time())) + '\n'content += '获取事件时间为' + get_timeto_addrs = '接收邮箱'#填上自己的email163 = Email163(content, to_addrs)email163.send_default_email()
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','Cookie':'自己的cookie'#填自己的}url = 'https://s.weibo.com/top/summary'html = page_request(url=url, header=header)page_parse(html)
if __name__ == "__main__":# 定时爬取,每隔20s爬取一次微博热搜榜并将爬取结果发送至个人邮箱# 可以将20修改成其他时间schedule.every(20).seconds.do(job)while True:schedule.run_pending()

这篇关于访问微博热搜榜,获取微博热搜榜前50条热搜名称、链接及其实时热度,并将获取到的数据以邮件的形式发送,每20秒一次发送到个人邮箱中。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/excellentOneBoy/article/details/133827751
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/316342

相关文章

解决mysql插入数据锁等待超时报错:Lock wait timeout exceeded;try restarting transaction

《解决mysql插入数据锁等待超时报错:Lockwaittimeoutexceeded;tryrestartingtransaction》:本文主要介绍解决mysql插入数据锁等待超时报... 目录报错信息解决办法1、数据库中执行如下sql2、再到 INNODB_TRX 事务表中查看总结报错信息Lock

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创

Nacos日志与Raft的数据清理指南

《Nacos日志与Raft的数据清理指南》随着运行时间的增长,Nacos的日志文件(logs/)和Raft持久化数据(data/protocol/raft/)可能会占用大量磁盘空间,影响系统稳定性,本... 目录引言1. Nacos 日志文件(logs/ 目录)清理1.1 日志文件的作用1.2 是否可以删除

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

通过cmd获取网卡速率的代码

《通过cmd获取网卡速率的代码》今天从群里看到通过bat获取网卡速率两段代码,感觉还不错,学习bat的朋友可以参考一下... 1、本机有线网卡支持的最高速度:%v%@echo off & setlocal enabledelayedexpansionecho 代码开始echo 65001编码获取: >

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp

Python Pandas高效处理Excel数据完整指南

《PythonPandas高效处理Excel数据完整指南》在数据驱动的时代,Excel仍是大量企业存储核心数据的工具,Python的Pandas库凭借其向量化计算、内存优化和丰富的数据处理接口,成为... 目录一、环境搭建与数据读取1.1 基础环境配置1.2 数据高效载入技巧二、数据清洗核心战术2.1 缺失