采集百度热搜新闻---通过邮箱自动分发

使用前需要准备的依赖:

yum install python3
python3 --version
pip3 install requests
pip3 install numpy
pip3 install pandas

1、百度热搜新闻采集:baidu.py

# -*- 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

2、通过qq邮箱自动分发:baidu_email.py

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)

3、将两个代码放入服务器中:

4、然后设置自动定时任务即可:

设置每天的9点57分,采集百度热搜榜前30的热度新闻发给你想发的人

crontab定时任务可以参考我之前的文章:crontab做系统定时任务命令_crontab -e_-berry的博客-CSDN博客

Q&A

  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 -*-

你可能感兴趣的:(爬虫,linux,服务器)