使用前需要准备的依赖:
yum install python3
python3 --version
pip3 install requests
pip3 install numpy
pip3 install pandas
# -*- coding: utf-8 -*-
import requests
import re
import numpy as np
from bs4 import BeautifulSoup
import pandas as pd
def spider():
#输入所要爬取的网页
url="https://top.baidu.com/board?tab=realtime"
#伪装爬虫头避免被检测拦截
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62'}
#请求网站
html=requests.get(url)
# print(html.text)
#对页面内容重新编码
html.encoding=html.apparent_encoding
data=html.text
#使用BeautifulSoup
soup=BeautifulSoup(data,'html.parser')
#显示网站结构
# print(soup.prettify())
titile=[]
index=[]
for i in soup.find_all(class_="hot-index_1Bl1a"):
index.append(i.get_text().strip())
for j in soup.find_all(class_="c-single-text-ellipsis"):
titile.append(j.get_text().strip())
data=[titile,index]
s=pd.DataFrame(data,index=["标题","热度数据"])
#将所得数据进行可视化
# with open('baidu.com','w+',encoding='utf8') as f:
# f.write(s.T)
# 将 DataFrame 保存为 txt 文件
# s.to_csv('baidu.txt', encoding='utf-8')
# print(s.T)
#将数据保存至本地并进行数据的清理
S="baidu.csv"
df=pd.DataFrame(data,index=["标题","热度数据"])
df.T.to_csv(S,encoding="utf_8_sig")
#清洗数据
# #有表头读入
# df = pd.read_csv('baidu.csv')
# #修改表头
# df = pd.read_csv('baidu.csv',header=None,names=['排名','热度数据','标题'])
# #调整排名
# df=df.drop([0])
# for i in range(31):
# df['排名'].loc[i] =i
# print(df)
df = pd.read_csv('baidu.csv')
# 将 DataFrame 对象赋值给变量
my_data = df.values
# print(type(my_data))#
# print(my_data)
# arr_str = np.array2string(my_data)
# 遍历数组并将元素保存为字符串
#\033[31排行榜 热搜话题 热度\033[m
arr_str = '排行榜 热搜话题 热度'+'\n'
for i in range(len(my_data)):
arr_str += str(my_data[i])+'\n'
arr_str=arr_str.replace("[0","置顶").replace("[",'').replace("]",'')
# 打印数组字符串
return arr_str
1、执行该段代码前:需要先去自己QQ邮箱设置里面配置STMP服务,才能分发,如图:可以上网搜一下如何配置即可,主要是获取到授权码即可
2、代码中替换你自己的东西如下:
sender_qq = '替换你自己的qq账号'
pwd = '替换自己的qq邮箱授权码'
receivers = ['替换要发送的qq账号[email protected]','替换要发送的qq账号[email protected]','替换要发送的qq账号[email protected]']
# -*- coding: utf-8 -*-
from email.mime.text import MIMEText
from email.header import Header
from smtplib import SMTP_SSL
import baidu
import requests
import re
'''
通过 requests 模块向某个网站请求数据
使用 re 模块对返回的数据进行筛选、匹配等处理,提取所需信息
利用 email.mime.text 和 email.header 模块生成符合邮件格式的内容,作为邮件正文和头部信息。
使用 smtplib.SMTP_SSL 类连接邮件服务器,登录邮箱账号,发送邮件。
'''
'''2、编写 发送邮箱 的代码'''
def send_email(sender_qq, pwd, receiver, mail_title, mail_content):
# qq邮箱的服务器
host_server = 'smtp.qq.com'
sender_qq_mail = sender_qq + '@qq.com'
# ssl 登录
smtp = SMTP_SSL(host_server)
smtp.set_debuglevel(1)
smtp.ehlo(host_server)
smtp.login(sender_qq, pwd)
msg = MIMEText(mail_content, 'plain', 'utf-8')
msg["Subject"] = Header(mail_title, 'utf-8')
msg["From"] = sender_qq_mail
msg["To"] = receiver
smtp.sendmail(sender_qq_mail, receiver, msg.as_string())
smtp.quit()
'''3、最终的函数入口'''
if __name__ == '__main__':
# sender_qq 为发件人的 qq 号码
sender_qq = '替换你自己的qq账号'
# pwd 为 qq 邮箱的授权码
pwd = '替换自己的qq邮箱授权码'
# 收件人的邮箱 receiver
receivers = ['替换要发送的qq账号[email protected]','替换要发送的qq账号[email protected]','替换要发送的qq账号[email protected]']
for i in receivers:
receiver=i
# 邮件正文
mail_content =baidu.spider()
mail_title = 'Baidu热搜TOP30'
send_email(sender_qq, pwd, receiver, mail_title, mail_content)
设置每天的9点57分,采集百度热搜榜前30的热度新闻发给你想发的人
crontab定时任务可以参考我之前的文章:crontab做系统定时任务命令_crontab -e_-berry的博客-CSDN博客
File "/root/baidu/baidu.py", line 7
SyntaxError: Non-ASCII character '\xe8' in file /root/baidu/baidu.py on line 7, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
在开头添加指定编码的注释行:
# -*- coding: utf-8 -*-