韩剧Tv网更新消息推送-python 爬虫
因为一直有看hjTV的爱好,也正好在csdn上看到类似的博客,于是想做一个检查网站更新并且发邮件提醒的爬虫。
思路来源参考:https://blog.csdn.net/qq_37457202/article/details/106537627
邮件发送部分参考:http://www.yiibai.com/python/python_sending_email.htm
代码部分
import requests
from lxml import etree
import osUrl = "https://www.hanjutv.com/"
header = {"User-Agent":"XXX"}
Host = requests.get(Url,headers=header)
Host.encoding='utf-8'
data_total = etree.HTML(Host.text)
link_total = []
#获取更新剧集部分
for link in data_total.xpath('//div[@class ="mod-main bd"]//li/a/@href')[:13]:link_total.append(Url+link)
contents = '' #将多个不同剧集的更新内容合到一封邮件中 #发送邮件
import smtplib
from email.header import Header
from email.mime.text import MIMEText#第三方 SMTP 服务
mail_host = "smtp.163.com" # SMTP服务器
mail_user = "XXX" # 用户名
mail_pass = "XXX" # 授权密码,非登录密码
sender = 'XXX' # 发件人邮箱(最好写全, 不然会失败)
receivers = ['XXX'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
title = '韩剧网更新' # 邮件主题def sendEmail(content):# 邮件的正文就是contentmessage = MIMEText(content, 'plain', 'utf-8') # 内容, 格式, 编码message['From'] = "{}".format(sender)message['To'] = ",".join(receivers)message['Subject'] = titletry:smtpObj = smtplib.SMTP_SSL(mail_host, 465) # 启用SSL发信, 端口一般是465smtpObj.login(mail_user, mail_pass) # 登录验证smtpObj.sendmail(sender, receivers, message.as_string()) # 发送print("mail has been send successfully.")except smtplib.SMTPException as e:print(e)def is_update(Tv_name,links):global contents if not os.path.exists('./hanju_tv/%s.txt'%Tv_name):print('文件不存在')return Trueelse:with open('./hanju_tv/%s.txt'%Tv_name,'r',encoding='utf-8') as f: f_length = len(f.readlines())l_length = len(links)if l_length>=f_length:x = l_length-f_length+1 # 加1是因为文本中题目占一行while x>0:contents = contents + "\n{}第{}集更新了,新集网址:{}".format(Tv_name,l_length-x,links[l_length-x])x = x-1f.close() return contentsdef scrapyOne(url):res = requests.get(url)res.encoding = 'utf-8'html = etree.HTML(res.text)#这里要用split(),原因是某些韩剧名字翻译过来会出现“再次十八岁 / 回到十八岁”#一旦更新剧集里面有这些名字就会出错,如果没有出现这种情况,split('/')也无影响Tv_name = html.xpath('//div[@class="albumDetailMain-right"]/h1/text()')[0]Tv_name = Tv_name.split('/')[0] #此处的links和前面的link_total有所不同,前者是一个剧里不同集数的链接,后者是更新的多个剧集链接。links=[]for link in html.xpath('//ul[@class="juji-list clearfix"]/li/a/@href'):links.append(Url+link.strip('/'))is_update(Tv_name,links) #更新txt前,先对比之前存下的记录看有没有更新with open('./hanju_tv/%s.txt'%Tv_name,'w',encoding='utf-8') as f:f.write(Tv_name+'\n')key_list = list(range(1,len(links)+1)) #这里想加个集数。for k,v in zip(key_list,links): #zip()能将这两列表合称为字典text = '第 {} 集 {}'.format(k,v)f.write(text+'\n')f.close() #随手关门,不然之后手动打开文件或关闭文件会报错return Tv_name,linksif __name__ =='__main__':for link in link_total: #对更新部分的剧集进行爬取scrapyOne(link)if contents != '': #判断更新内容不为空,就发邮件。 sendEmail(contents)
在编写爬虫过程中遇到几个问题:
1)网站的源码部分比较特殊,各个部分(剧集更新、剧集推荐等)各节点几乎是一致的,用正则表达式会爬取到不同的链接(不是我想要的顺序),于是去学了xpath,简单的有顺序的取前面12个链接,刚好就是我想要的。
2)发邮件部分不懂,参照网上的资料编写。
3)还有很多小细节部分,三个函数间连接,添加剧集号,合成发一封邮件、发邮件的格式慢慢修改过来。(本来刚开始参照别人写成类的形式,但是自己写的不够简洁且问题多,于是都写成函数)
感觉代码还有许多不足,希望在之后的学习一步步变强。
韩剧Tv网更新消息推送-python 爬虫相关推荐
- 苹果cmsv10仿韩剧TV网电脑加手机高端模板免费下载
苹果cmsv10仿韩剧TV网电脑加手机高端模板免费下载主题介绍: 模板名称:苹果cmsv10仿韩剧TV网电脑加手机高端模板免费下载 模板程序:苹果cmsv10 模板类型:自适应 模板颜色:白色 模板来 ...
- php 企业号文本消息推送,Python如何实现微信企业号文本消息推送功能的示例
这篇文章主要介绍了Python编程实现微信企业号文本消息推送功能,结合实例形式分析了Python微信企业号文本消息推送接口的调用相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python微信企业号 ...
- 【corpwechat-bot】一个好用的企业微信消息推送python接口库
文章目录 前言 Requirements Result Features Usage 前言 本文同步发表在blog.gentlecp.com corpwechat-bot是一个python封装的企业机 ...
- 外星php,《外星居民》免费在线播放_韩剧TV网
当前位置:首页欧美剧外星居民 外星居民 评分:6.0还行 分类:欧美剧地区:欧美年份:2021 更新:更新至07集/2021-03-12 04:20:05 简介:故事讲述一个迫降的外星人哈利(图代克饰 ...
- 企业微信消息推送和钉钉消息推送python代码封装
前言:目前很多公司用的是企业微信或者钉钉,对于服务的可用性都会有一个告警通知,方面我们及时了解信息,这里我做了一个简单的封装,方便大家使用! #!/usr/bin/env python # _*_ c ...
- Android 二维码被扫后接收通知(使用MQTT协议实现消息推送)
现如今扫码付款和收款已经很便利了,比如超市买完东西付款时有两种方式 : 顾客可以出示付款码给收银员扫码收款,也可以由顾客扫描超市的收款码进行付款 .两种方式在付款完成后超市端会进行语音播报收到xx元. ...
- android开发之消息推送
本人想把Android所要运用到的所有的东西都好好的梳理一遍,那今个儿就和大伙说说消息推送:想必大家都玩过小米手机,细心的人会发现,小米手机时不时的就会发一些通知告诉你要系统升级了.某某App有新版本 ...
- 友盟消息推送服务器demo,umeng友盟消息推送功能集成
umeng友盟消息推送功能集成(本人使用的是eclipse开发) 1.首先请自行观看友盟消息推送集成的API文档. 观看地址如下: 2.集成步骤如下 下载sdk 注意:有两种sdk如果用户已经集成支付 ...
- Android消息推送:手把手教你集成小米推送
<script type="text/javascript" src="http://static.blog.csdn.net/scripts/category.j ...
最新文章
- tensorflow和keras的版本问题
- (一)为什么你应该(从现在开始就)写博客
- PopWindow弹出在任意位置。
- Request.InputStream 将数据作为XML数据发送
- Linux之sort:r倒叙t分隔符n数值型k排序依据
- 签入VSS中遇到UTF-8问题
- Web API 速率限制(二)- 令牌桶算法简介
- java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this a
- 字符串 - KMP模式匹配
- 局部临时表 全局临时表 表变量
- 小白学数据分析-----留存率的三个普适原则
- [技术随笔(二)] win10 回滚 win7 注意事项
- vmware虚拟机桥接模式无法上网
- 『开源项目』基于STM32的智能垃圾桶之语音播报
- 多功能Win系统维护工具箱
- 英雄联盟显示服务器属于高限制,玩英雄联盟出现超出频率限制,该怎么处理?
- c语言小组作业报告,C语言实训总结报告范文
- 虚拟贝司拓展音源-Toontrack Acoustic EBX
- [从头读历史] 第257节 孔子和他的《春秋》 [BC537至BC479]
- STM32通信:IIC (二)