Python爬虫练习二-定时抓取网站的更新内容

news/2024/5/13 9:52:48/文章来源:https://ydlin.blog.csdn.net/article/details/106537627

前言:

通过第一阶段的学习,接下来简单的抓取一下网站更新的内容并且以邮件的方式提醒

代码:

一、简单抓取网站以邮件进行通知:
 

原理:

1、将需要使用的包导入

2、编写邮件发送模板,

3、分析需要抓取的网站

4、借助文件读写操作将对比抓取到的第一条与文件中存在的一条去比较

5、如果有则更新,则发送邮件

实现代码:

邮件模板:

import smtplib
from email.mime.text import MIMEText
from email.header import Headerdef email(csdn_article_title,csdn_article_url):sender = ' '#填写发件人pwd = ' '#登录密码,是邮件第三方登录的那个密码receivers = [' ']#填写收件人mainText="网站有内容更新,更新题目为:"+csdn_article_title+"更新网址为:"+csdn_article_urlmessage = MIMEText(mainText,"plain",'utf-8')# 三个参数:第一个为文本内容,第二个为plain设置文本格式,第三个为utf-8设置编码message ['From'] = "XXX <XX@qq.com>"message ['To'] = "XXX <XX@126.com>"subject = "CSDN网站有内容更新"#邮件主题message["Subject"] = subjecttry:# 使用非本地服务器,需要建立ssl连接smtpObj = smtplib.SMTP_SSL("smtp.qq.com",465)#发件箱邮件服务器smtpObj.login(sender,pwd)smtpObj.sendmail(sender,receivers,message.as_string())print("邮件发送成功")except smtplib.SMTPException as e:print("Error:无法发送邮件.Case:%s"%e)

邮件测试模板:

#!/usr/bin/python
# -*- coding: UTF-8 -*-import smtplib
from email.mime.text import MIMEText
from email.utils import formataddrmy_sender = '@qq.com'  # 发件人邮箱账号
my_pass = 'as'  # 发件人邮箱密码
my_user = 'a@qq.com'  # 收件人邮箱账号,我这边发送给自己def mail():ret = Truetry:msg = MIMEText('填写邮件内容', 'plain', 'utf-8')msg['From'] = formataddr(["FromRunoob", my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号msg['To'] = formataddr(["FK", my_user])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号msg['Subject'] = "菜鸟教程发送邮件测试"  # 邮件的主题,也可以说是标题server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,端口是25server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码server.sendmail(my_sender, [my_user, ], msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件server.quit()  # 关闭连接except Exception:  # 如果 try 中的语句没有执行,则会执行下面的 ret=Falseret = Falsereturn retret = mail()
if ret:print("邮件发送成功")
else:print("邮件发送失败")

抓取分析模板:

import requests
from lxml import etree
import time
import os
from sendEmail import emailwhile True:# 博主名字author_name = input("请输入博主的名字: ")# 博主博文页数page_num = int(input("请输入博客页数: "))url = "https://blog.csdn.net/"+author_name+"/article/list/"+str(page_num)  #目标跟踪网页content = requests.get(url).contenthtml = etree.HTML(content)# 博客文章的标题# 博客文章的标题title = html.xpath("//div[@class='article-item-box csdn-tracking-statistics']/h4/a/text()") #取0为空 暂时不清粗为什么csdn_article_url = html.xpath("//div[@class='article-item-box csdn-tracking-statistics']//h4//a/@href")[0]# 处理换行问题csdn_article_title = []for i in range(0, len(title)):csdn_article_title.append(title[i].strip())while "" in csdn_article_title:csdn_article_title.remove("")#获取第一篇文章标题print("当前的标题为:%s"%csdn_article_title[0]) #取第一个print("当前的链接为:%s" %csdn_article_url)#屏幕打印获取的第一篇文章标题#文件打印 转换为字符换类型csdn_article_title[0]=str(csdn_article_title[0])csdn_article_url=str(csdn_article_url)if not os.path.isfile("D:\\title_temp.txt"):#判断title_temp.txt文件是否存在,不存在则创建,并写入获取的第一篇文章标题f = open("D:\\title_temp.txt", "w")f.write(csdn_article_title[0])f.write(csdn_article_url)print("将当前标题、url记录在D:\title_temp.txt中,等待检测")f.close()else:#title_temp.txt文件存在的话,提取里面标题,和获取的标题对比with open("D:\\title_temp.txt", "r+") as f:old_url = f.read()if old_url !=csdn_article_url:#如果读取内容和获取的网站第一篇文章标题不一致,则表明网站更新#email(csdn_article_title[0],csdn_article_url)#发送qq邮件f.seek(0)f.truncate()print("网站有更新,需通知")f.write(csdn_article_title[0])f.write(csdn_article_url)#写入最新的标题内容,方便下一次比对break#退出循环else:#否则的话,表明网站没有更新print("网站暂时没有更新\n")time.sleep(5)#检测网页内容时间间隔,单位为秒(s)

结果:

二、抓取存到EXCEL进行分析:
 

原理:

1、将需要使用的包导入

2、编写EXCEL存储模板,

3、分析需要抓取的网站

4、存入excel

Notes:

查了很多资料!!! 评论和阅读自从改成图片 类属性都是read-num后 一直抓不到阅读数和评论数

 

实现代码:

import requests
import xlrd
import xlwt
from lxml import etree
from lxml import html
from xlutils.copy import copy# 爬虫实战: 爬取CSDN博客的所有博客文章链接# 第1页: https://blog.csdn.net/cnds123321/article/list/1
# 第2页: https://blog.csdn.net/cnds123321/article/list/2
# 第3页: https://blog.csdn.net/cnds123321/article/list/3
# 故可以得出公式: url="https://blog.csdn.net/"+author_name+"/article/list/"+page_index
# author_name指的是博主的名字,page_index指的是页码当前是第几页# path指的是excel文件的路径;sheet_name指的是工作簿的名字;value指的是数据,是一个嵌套列表
def write_excel_xls(path, sheet_name, value):"""创建excel文件,并初始化一定的数据"""index = len(value)  # 获取需要写入数据的行数workbook = xlwt.Workbook()  # 新建一个工作簿sheet = workbook.add_sheet(sheet_name)  # 在工作簿中新建一个表格for i in range(0, index):for j in range(0, len(value[i])):sheet.write(i, j, value[i][j])  # 像表格中写入数据(对应的行和列)workbook.save(path)  # 保存工作簿# path指的是excel文件的路径;value指的是数据,是一个嵌套列表
def write_excel_xls_append(path, value):"""向excel表中增加数据"""index = len(value)  # 获取需要写入数据的行数workbook = xlrd.open_workbook(path)  # 打开工作簿sheets = workbook.sheet_names()  # 获取工作簿中的所有表格worksheet = workbook.sheet_by_name(sheets[0])  # 获取工作簿中所有表格中的的第一个表格rows_old = worksheet.nrows  # 获取表格中已存在的数据的行数new_workbook = copy(workbook)  # 将xlrd对象拷贝转化为xlwt对象new_worksheet = new_workbook.get_sheet(0)  # 获取转化后工作簿中的第一个表格for i in range(0, index):for j in range(0, len(value[i])):new_worksheet.write(i + rows_old, j, value[i][j])  # 追加写入数据,注意是从i+rows_old行开始写入new_workbook.save(path)  # 保存工作簿# 请求头# 博主名字
author_name = input("请输入博主的名字: ")
# 博主博文页数
page_num = int(input("请输入博客页数: "))
# 写入表头数据
write_excel_xls("CSDN-" + author_name + ".xls", author_name, [["文章类型", "文章标题", "文章链接", "发表日期", "阅读数", "评论数"], ])
# 循环每页
for index in range(1, page_num + 1):# 拼接URL !!!不能有空格page_url = "https://blog.csdn.net/"+author_name+"/article/list/"+str(page_num)# 发送请求,获取响应content = requests.get(page_url).contentpage_html = etree.HTML(content)# 博客文章的标题title_list = page_html.xpath("//div[@class='article-item-box csdn-tracking-statistics']/h4/a/text()")# 处理换行问题csdn_article_title_list = []for i in range(0, len(title_list)):csdn_article_title_list.append(title_list[i].strip())while "" in csdn_article_title_list:csdn_article_title_list.remove("")# 博客文章的类型csdn_article_type_list = page_html.xpath("//div[@class='article-item-box csdn-tracking-statistics']/h4/a/span")# 博客文章的链接csdn_article_link_list = page_html.xpath("//div[@class='article-item-box csdn-tracking-statistics']//h4//a/@href")# 博客文章的发表日期csdn_article_publishDate_list = page_html.xpath("//div[@class='info-box d-flex align-content-center']/p/span[@class='date']")# 博客文章的阅读数csdn_article_readerCount_list = page_html.xpath("//div[@class='info-box d-flex align-content-center']/p/span[@class='read-num'][1]")# 博客文章的评论数csdn_article_commentCount_list = page_html.xpath("//div[@class='info-box d-flex align-content-center']/p/span[@class='read-num'][2]")for i in range(0, len(csdn_article_title_list)):print(csdn_article_type_list[i].text, csdn_article_title_list[i],csdn_article_publishDate_list[i].text,csdn_article_readerCount_list[i].text)# 将数据保存到excel表格中for i in range(0, len(csdn_article_title_list)):data = [[csdn_article_type_list[i].text, csdn_article_title_list[i], csdn_article_link_list[i],csdn_article_publishDate_list[i].text, csdn_article_readerCount_list[i].text,csdn_article_commentCount_list[i].text], ]print("正在保存: " + csdn_article_title_list[i] + "......")write_excel_xls_append("CSDN-" + author_name + ".xls", data)
print("CSDN-" + author_name + ".xls保存成功!")

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_817624.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell脚本统计网站pv,每分钟/小时/天~

脚本内容如下: #!/bin/bash ####获取输入 read -p "请输入日志名称: " log_name ####将日志进行统计&#xff0c;每秒钟的请求数 cat ./$log_name | cut -d -f4 | uniq -c | sort -n -r -o ./temp_sorted.log ###定义一天的pv&#xff0c;初始值为0 all_pv0 ###循…

java网站源码_六个编程学习网站,拥有了你就无往而不利

其实现在学习编程并没有你想象中的那么难。在互联网发达的今天&#xff0c;网上的学习资料非常多。只要你用心的去找&#xff0c;基本都能够找到你想找到的东西。而在这个时候&#xff0c;掌握几个学习编程的网站就很有必要了&#xff0c;对你的学习绝对会有很多很大的好处。今…

如何去除html的flash,去除网站Flash动画效果,提升seo优化友好度

Flash网站和SEO优化是一个平台化的话题。尽管搜索引擎正在尝试获取Flash网站&#xff0c;但我们仍然不建议创建Flash网站&#xff0c;尤其是当您的目标客户完全依赖于搜索引擎优化时。优帮云平台认为&#xff0c;从现在起&#xff0c;Flash网站仍然给搜索引擎带来一些障碍&…

协议密钥存储_大型网站如何基于协议和配置来优化?

1 前言百度在2015年即完成HTTPS改造&#xff0c;那大型网站的HTTPS改造中都有哪些实践经验&#xff1f;本文就为大家介绍 HTTPS 在访问速度&#xff0c;计算性能&#xff0c;安全等方面基于协议和配置的优化。2 HTTPS 访问速度优化2.1 Tcp fast openHTTPS 和 HTTP 使用 TCP 协议…

php 有没有必须登录后才能访问 文件的权限_怎么无密码登录网站后台?试试变量覆盖漏洞...

1前言各位师傅们有没有这样的经历&#xff0c;看着大佬随便爆破就可以进别人网站的后台&#xff0c;嘴上mmp&#xff0c;心里还要mmp&#xff0c;怎么自己的字典就那么呢&#xff0c;没办法&#xff0c;苦求无门&#xff0c;只能自己另寻办法解决。经过学习发现这么个变量覆盖漏…

linux 字符设备驱动测试,测试源码 - 简单的Linux字符设备驱动_Linux编程_Linux公社-Linux系统门户网站...

//------------------------------测试源码---------------------------------------#include #include #include #include int main (void){int fd;// char buff[]"Ta ti ta ti";char buff[200];int i;for(i200; i > 0; i--) {if(i < 128){buff[i]i;}else …

服务器网站iis如何关闭,08系统如何关闭IIS服务(图文)

导读&#xff1a;08系统如何关闭IIS服务(图文) 很多用户在使用服务器时&#xff0c;选用的是其它软件搭建的网站&#xff0c;但是没有关闭IIS&#xff0c;会导致网站受到影响&#xff0c;那么真的就是不关闭IIS会导致这种情况么&#xff0c;小编也了解到了一些相关信息&#xf…

mixamo骨骼_看到角色动画就头疼(这个网站从骨骼绑定到动画一键帮你解决)

最近在忙一个项目&#xff0c;项目中遇到角色动画。虽然以前上学的时候学过&#xff0c;但是工作这几年&#xff0c;因为用到的时候比较少&#xff0c;基本上都还给了老师。话虽说还给了老师&#xff0c;但是项目中遇到了&#xff0c;还是要迎难而上的。(不上也没办法&#xff…

用JS写一个网站树形菜单

先上效果图&#xff1a; 主体内容就是侧边展示的一二三级菜单&#xff0c;树形结构的。 前端页面布局内容&#xff0c;页面内容简单用ul li 来完成所有的罗列项。用先后顺序来区分一级二级三级&#xff1a; <body><b><img src"images/fold.gif">树…

Django应用:学习日志网站

目录 一、创建虚拟环境&#xff08;Windows&#xff09; 二、创建项目 三、创建应用程序 四、创建网页&#xff1a;学习笔记主页 五、创建其他网页 六、用户输入数据 七、用户账户 八、让用户拥有自己的数据 九、设置应用程序样式 十、部署“学习笔记” 一、创建虚拟环境&#…

如何查看自己网站的访问量

一.方法种类 具体网站有很多比如&#xff1a;百度统计&#xff0c;CNZZ&#xff0c;51啦&#xff0c;腾讯分析&#xff0c;这几个是当下最流行的&#xff0c;这里主要介绍腾讯分析&#xff1b; 二.腾讯分析网址 http://ta.qq.com/ 三.具体流程 1.登录注册你的账号&#xff1b; …

开发一个网站的总体流程

一般流程&#xff1a;&#xff08;以一个登录页面为例&#xff09; 1、美工 用photoshop设计每个页面的效果图&#xff0c;一般文件格式为PSD。 以下就是一个设计好的效果模版图&#xff1a; 2、切图得素材 对美工得到的效果图进行相应的裁剪&#xff0c;最终作为网页开发时…

[转]一个普通网站发展成大型网站过程中的架构演变史

一个普通网站发展成大型网站过程中的架构演变史[转]架构演变第一步&#xff1a;物理分离webserver和数据库最开始&#xff0c;由于某些想法&#xff0c;于是在互联网上搭建了一个网站&#xff0c;这个时候甚至有可能主机都是租借的&#xff0c;但由于这篇文章我们只关注架构的演…

【转载】在IIS中使用SSL配置HTTPS网站

原文地址&#xff1a;在IIS中使用SSL配置HTTPS网站 在IIS中使用SSL配置HTTPS网站 由于Windows系统的普及&#xff0c;很多中小企业在自己的网站和内部办公管理系统都是用默认的IIS来做WEB服务器使用。 默认情况下我们所使用的HTTP协议是没有任何加密措施的&#xff0c;所有的…

12 个免费在线的 Web 网站性能测试工具 - 转

1) Web Page Test 从世界各地多个地点&#xff0c;使用真正的浏览器&#xff08;IE和Chrome&#xff09;&#xff0c;并在真正的消费者连接速度&#xff0c; 对你的网站进行速度测试。您可以运行简单的测试&#xff0c;或执行多步交易&#xff0c;视频采集&#xff0c;内容封锁…

Web页面性能优化以及SEO

为什么要提高web性能&#xff1f; Web性能黄金准则&#xff1a;只有10%20%的最终用户响应时间花在了下载html文档上&#xff0c;其余的80%90%时间花在了下载页面组件上。    web性能对于用户体验有及其重要的影响&#xff0c;根据著名的2-5-8原则&#xff1a; 当用户在2秒以…

为Windows Phone添加一个Asp.net 网站一样的配置文件

开发过任何一个网站的童鞋&#xff0c;都明白配置文件在运用中是很有必要的&#xff0c;例如一些静态的字符串&#xff0c;我们在调用的时候&#xff0c;直接用开发语言提供的接口就能很方便地访问各种常量&#xff0c;例如Asp.net 内置的System.Configuration命名空间下的例如…

php自动下载网页图片,CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法...

本文实例讲述了CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法。分享给大家供大家参考。具体如下&#xff1a;因为某网站看图比较坑爹&#xff0c;要一页一页的翻页。。。。所以。。。。就写了这么个东西(我是产品不是程序员)运行速度简直无法忍受&#xff0c;而且经…

30个高质量的旅游网站设计

很多人都认为旅游是最好的度假方式。现在&#xff0c;你可以很容易的从旅游网站获取一些户外假期安排的灵感来。成千上外的人们开始使用网络资源来组织和安排他们的假期生活。这类的旅游网站资源已经是铺天盖地了。从选择目的地&#xff0c;预订机票和酒店&#xff0c;甚至购买…

给大家推荐一个python的学习网站 http://www.codecademy.com

注册之后&#xff0c;可以跟着指导&#xff0c;自己编码学习&#xff0c;比较方面&#xff1a; 再推荐一个在线编译的代码网站&#xff0c;c/c python 都可以&#xff1a; http://codepad.org 转载于:https://www.cnblogs.com/wuyida/p/6301431.html