内容

访问微博热搜榜(https://s.weibo.com/top/summary)
获取微博热搜榜前50条热搜名称、链接及其实时热度,并将获取到的数据通过邮件的形式,每20秒发送一次到个人邮箱中。

导入库

1
2
3
4
5
6
import requests
from bs4 import BeautifulSoup as BS
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import time

定义获取微博热搜的函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def get_line():
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
'Cookie':'4210214103(保密了)'
}
url = 'https://s.weibo.com/top/summary'
soup=BS(requests.get(url,headers=headers).content.decode('utf-8'),'lxml')
tips=soup.select('#pl_top_realtimehot > table > tbody > tr > td.td-02 > a')
hot=soup.select('#pl_top_realtimehot > table > tbody > tr > td.td-02 > span')
x=soup.select('#pl_top_realtimehot > table > tbody > tr > td.td-02 > a')
line='\n'
for i in range(1,51):
line+=f"Top{i}:"+tips[i].text+" 热度:"+hot[i].text+"\n地址:https://s.weibo.com"+x[i].get('href')+'\n\n'
return line
  • get_line函数用于爬取微博热搜榜的数据。
  • headers:设置HTTP请求头,包括User-Agent和Cookie。
  • url:微博热搜榜的URL。
  • soup:使用BeautifulSoup解析请求返回的HTML内容。
  • tips、hot、x:使用CSS选择器分别提取热搜关键词、热度和链接。
  • line:初始化一个字符串,用于存储格式化后的热搜信息。
  • for循环:遍历热搜榜的前50条数据,将每条热搜的信息格式化后添加到line字符串中。
  • return line:返回包含所有热搜信息的字符串。

定义发送邮件的函数

1
2
3
4
5
6
7
8
9
10
11
12
def send_email(line):
sender_email = "941521358@qq.com"
receiver_email = "ldyertop@qq.com"
password = "4210214103(保密了)"
message = MIMEMultipart()
message['From'] = sender_email
message['To'] = receiver_email
message['Subject'] = "Ldyer的微博热搜"
message.attach(MIMEText(line, 'plain'))
with smtplib.SMTP_SSL('smtp.qq.com', 465) as server:
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message.as_string())
  • send_email函数用于发送电子邮件。
  • sender_email、receiver_email、password:发件人邮箱、收件人邮箱和邮箱密码。
  • message:创建一个MIMEMultipart对象,用于构建邮件内容。
  • message[‘From’]、message[‘To’]、message[‘Subject’]:设置邮件的发件人、收件人和主题。
  • message.attach:将文本内容添加到邮件中。
  • with smtplib.SMTP_SSL:使用smtplib的SMTP_SSL对象连接到QQ邮箱的SMTP服务器。
  • server.login:登录邮箱。
  • server.sendmail:发送邮件。

无限循环发送邮件

1
2
3
4
while True:
send_email(get_line())
print("邮件已发送")
time.sleep(20)

运行结果