因为一直有看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 爬虫相关推荐

  1. 苹果cmsv10仿韩剧TV网电脑加手机高端模板免费下载

    苹果cmsv10仿韩剧TV网电脑加手机高端模板免费下载主题介绍: 模板名称:苹果cmsv10仿韩剧TV网电脑加手机高端模板免费下载 模板程序:苹果cmsv10 模板类型:自适应 模板颜色:白色 模板来 ...

  2. php 企业号文本消息推送,Python如何实现微信企业号文本消息推送功能的示例

    这篇文章主要介绍了Python编程实现微信企业号文本消息推送功能,结合实例形式分析了Python微信企业号文本消息推送接口的调用相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python微信企业号 ...

  3. 【corpwechat-bot】一个好用的企业微信消息推送python接口库

    文章目录 前言 Requirements Result Features Usage 前言 本文同步发表在blog.gentlecp.com corpwechat-bot是一个python封装的企业机 ...

  4. 外星php,《外星居民》免费在线播放_韩剧TV网

    当前位置:首页欧美剧外星居民 外星居民 评分:6.0还行 分类:欧美剧地区:欧美年份:2021 更新:更新至07集/2021-03-12 04:20:05 简介:故事讲述一个迫降的外星人哈利(图代克饰 ...

  5. 企业微信消息推送和钉钉消息推送python代码封装

    前言:目前很多公司用的是企业微信或者钉钉,对于服务的可用性都会有一个告警通知,方面我们及时了解信息,这里我做了一个简单的封装,方便大家使用! #!/usr/bin/env python # _*_ c ...

  6. Android 二维码被扫后接收通知(使用MQTT协议实现消息推送)

    现如今扫码付款和收款已经很便利了,比如超市买完东西付款时有两种方式 : 顾客可以出示付款码给收银员扫码收款,也可以由顾客扫描超市的收款码进行付款 .两种方式在付款完成后超市端会进行语音播报收到xx元. ...

  7. android开发之消息推送

    本人想把Android所要运用到的所有的东西都好好的梳理一遍,那今个儿就和大伙说说消息推送:想必大家都玩过小米手机,细心的人会发现,小米手机时不时的就会发一些通知告诉你要系统升级了.某某App有新版本 ...

  8. 友盟消息推送服务器demo,umeng友盟消息推送功能集成

    umeng友盟消息推送功能集成(本人使用的是eclipse开发) 1.首先请自行观看友盟消息推送集成的API文档. 观看地址如下: 2.集成步骤如下 下载sdk 注意:有两种sdk如果用户已经集成支付 ...

  9. Android消息推送:手把手教你集成小米推送

    <script type="text/javascript" src="http://static.blog.csdn.net/scripts/category.j ...

最新文章

  1. tensorflow和keras的版本问题
  2. (一)为什么你应该(从现在开始就)写博客
  3. PopWindow弹出在任意位置。
  4. Request.InputStream 将数据作为XML数据发送
  5. Linux之sort:r倒叙t分隔符n数值型k排序依据
  6. 签入VSS中遇到UTF-8问题
  7. Web API 速率限制(二)- 令牌桶算法简介
  8. java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this a
  9. 字符串 - KMP模式匹配
  10. 局部临时表 全局临时表 表变量
  11. 小白学数据分析-----留存率的三个普适原则
  12. [技术随笔(二)] win10 回滚 win7 注意事项
  13. vmware虚拟机桥接模式无法上网
  14. 『开源项目』基于STM32的智能垃圾桶之语音播报
  15. 多功能Win系统维护工具箱
  16. 英雄联盟显示服务器属于高限制,玩英雄联盟出现超出频率限制,该怎么处理?
  17. c语言小组作业报告,C语言实训总结报告范文
  18. 虚拟贝司拓展音源-Toontrack Acoustic EBX
  19. [从头读历史] 第257节 孔子和他的《春秋》 [BC537至BC479]
  20. STM32通信:IIC (二)

热门文章

  1. 如何判断集成墙面适不适合家庭装修?
  2. vue3+tslint报错
  3. DataWhale-天池街景数字识别竞赛-task1-赛题理解
  4. 【效率】一个令人赞不绝口的代码 Debug 神器!
  5. 操作系统启动过程——硬件自检+系统引导+系统加载+系统登录
  6. Ubuntu应用---安装 Intel Wireless-AC 9462 无线网卡驱动(无法连接wifi,完美解决)
  7. 计算机闹铃音乐在线听,在计算机上设置闹钟功能,并每天自动打开音乐
  8. 2019Unite大会
  9. 案例:能否借助AI破译婴儿哭声?
  10. 微信棋牌游戏源码搭建HTML5极简的JS函数