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,喜欢的可以点个收藏和关注,我们下次再见!