Python番外篇:爬取腾讯新闻热点内容 并发送新闻提示电子邮件

hello,大家好,我是wangzirui32,今天来教大家如何爬取爬取腾讯新闻热点内容,并发送新闻提示电子邮件,开始学习吧!

1. HTML解析

腾讯网的首页为https://www.qq.com,打开“抗肺炎”专区,开始解析:新闻
这个新闻的XPath是

//*[@id="tab-news-02"]/ul[1]/li[2]/a

我们对这个路径稍作修改,爬取id='tab-news-02'的div标签下所有的a标签:

//*[@id="tab-news-02"]/ul/li/a

网页分析完了,开始编写代码。

2. 编写代码

爬取代码如下:(运行前请先运行pip install jinja2安装Jinja2库)

import requests
from lxml import etree
from jinja2 import Template
import smtplib
from email.mime.text import MIMEText

# 发送电子邮件的函数
def send_email(news):
    msg = MIMEText(news, "html", "UTF-8")
    msg['From']    = "你的电子邮箱@xxxx.com"
    msg['To']      = "你的电子邮箱@xxxx.com"
    msg['Subject'] = "当前腾讯热点新闻"

    smtp = smtplib.SMTP("SMTP服务器地址")
    smtp.login("你的电子邮箱@xx.com", "电子邮箱的授权码")
    smtp.send_message(msg)
    smtp.quit()

# 电子邮件模板
template = """
<h1 style='text-align: center;'>当前腾讯热点新闻</h1>
<hr align="center" width="300" color="#808080" SIZE=1>
{% for news in news_list %}
    <h3 style='text-align: center;'><a href='{{ news[1] }}'>{{ news[0] }}</a></h3>
{% endfor %}
"""

# 请求页面
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64"
}
r = requests.get("https://www.qq.com/", headers=headers)

# 解析页面
html = etree.HTML(r.text)

# 提取新闻内容和链接
news_xpath = '//*[@id="tab-news-02"]/ul/li/a/'
news_content = html.xpath(news_xpath+"text()")
news_link    = html.xpath(news_xpath+"@href")

# 通过zip函数组合成一条条完整的新闻数据
news = zip(news_content, news_link)

# 使用Jinja2生成电子邮件内容
email_content = Template(template).render(news_list=news)
# 发送电子邮件
send_email(email_content)

关于电子邮件的操作请参考这篇博文
在以上代码中,我们定义了发送的函数send_email,爬取了数据,并通过zip函数将新闻内容和新闻链接组合在了一起,最后,我们用Jinja2生成电子邮件内容,并且进行了发送的操作。
很多同学可能不明白以下代码的作用:

{% for news in news_list %}
    <h3 style='text-align: center;'><a href='{{ news[1] }}'>{{ news[0] }}</a></h3>
{% endfor %}

这里的{% for news in news_list %}{% endfor %}语句是遍历程序传来的news_list列表,然后通过{{ news[1] }}{{ news[0] }}读取内容和链接,最后重复生成新闻标签,完成模板的加载。


好了,今天的课程就到这里,我是wangzirui32,喜欢的可以点个收藏和关注,我们下次再见!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值