练习介绍
 
在第3关的一个课后练习里,我们爬取了指定电影的下载链接;在第6关的一个课后练习里,我们存储了豆瓣TOP250的榜单信息。
 
现在,我们完善这个程序,每周五在存储的榜单中,随机抽三部电影,然后去爬取这三部电影的下载链接,并把链接的结果发送到邮箱。
 
这样一来,我们就可以选择一部电影在周末欣赏啦。
 
 import requests
import time
import schedule
import smtplib
import numpy
from urllib.request import quote
from bs4 import BeautifulSoup
from email.mime.text import MIMEText
from email.header import Header def fun_top250_3(): movie_names = [] for i in numpy.random.randint(0,249,3):
res = requests.get('https://movie.douban.com/top250?start={}'.format(i))
soup = BeautifulSoup(res.text,'html.parser')
item = soup.find('div',class_='item').find('span').text
movie_names.append(item) return movie_names def fun_download_url(): movie_names = fun_top250_3() movie_names_urls = '' for i in movie_names:
key_word = quote(i,encoding='gbk')
res = requests.get('http://s.ygdy8.com/plus/so.php?typeid=1&keyword={}'.format(key_word))
res.encoding='gbk'
soup = BeautifulSoup(res.text,'html.parser')
check_none = soup.find('div',class_='co_content8').find('table') if check_none:
item = soup.find('td',width='55%').find('b').find('a')
res = requests.get('https://www.ygdy8.com'+item['href'])
res.encoding='gbk'
soup = BeautifulSoup(res.text,'html.parser')
item = soup.find('td',style='WORD-WRAP: break-word').find('a').text
movie_names_urls += '电影名:{}\t下载链接:{}\n'.format(i,item)
else:
movie_names_urls += '电影名:{}\t下载链接:没有找到\n'.format(i) return movie_names_urls def fun_sendmail(): movie_names_urls = fun_download_url() mail_user = 'www1707@xxx.cn'
mail_pwd = 'yyy'
receiver = 'user01@xxx.cn'
subject = time.strftime('%Y{}%W{}%S').format('年 第','周 推荐电影')
content = movie_names_urls alimail = smtplib.SMTP()
alimail.connect('smtp.qiye.aliyun.com',25)
alimail.login(mail_user,mail_pwd) message = MIMEText(content,'plain','utf-8')
message['Subject'] = Header(subject,'utf-8')
message['From'] = Header(mail_user,'utf-8')
message['To'] = Header(receiver,'utf-8') alimail.sendmail(mail_user,receiver,message.as_string())
alimail.quit() print(movie_names_urls) #schedule.every().friday.do(fun_sendmail())
schedule.every(10).seconds.do(fun_sendmail) while True:
schedule.run_pending()
time.sleep(1)

老师的答案
 import requests,csv,random,smtplib,schedule,time
from bs4 import BeautifulSoup
from urllib.request import quote
from email.mime.text import MIMEText
from email.header import Header def get_movielist():
csv_file=open('movieTop.csv', 'w', newline='',encoding='utf-8')
writer = csv.writer(csv_file)
for x in range(10):
url = 'https://movie.douban.com/top250?start=' + str(x*25) + '&filter='
res = requests.get(url)
bs = BeautifulSoup(res.text, 'html.parser')
bs = bs.find('ol', class_="grid_view")
for titles in bs.find_all('li'):
title = titles.find('span', class_="title").text
list1 = [title]
writer.writerow(list1)
csv_file.close() def get_randommovie():
movielist=[]
csv_file=open('movieTop.csv','r',newline='',encoding='utf-8')
reader=csv.reader(csv_file)
for row in reader:
movielist.append(row[0])
three_movies=random.sample(movielist,3)
contents=''
for movie in three_movies:
gbkmovie = movie.encode('gbk')
urlsearch = 'http://s.ygdy8.com/plus/so.php?typeid=1&keyword='+quote(gbkmovie)
res = requests.get(urlsearch)
res.encoding='gbk'
soup_movie = BeautifulSoup(res.text,'html.parser')
urlpart=soup_movie.find(class_="co_content8").find_all('table')
if urlpart:
urlpart=urlpart[0].find('a')['href']
urlmovie='https://www.ygdy8.com/'+urlpart
res1=requests.get(urlmovie)
res1.encoding='gbk'
soup_movie1=BeautifulSoup(res1.text,'html.parser')
urldownload=soup_movie1.find('div',id="Zoom").find('span').find('table').find('a')['href']
content=movie+'\n'+urldownload+'\n\n'
print(content)
contents=contents+content
else:
content='没有'+movie+'的下载链接'
print(content)
return contents def send_movielink(contents):
mailhost='smtp.qq.com'
qqmail = smtplib.SMTP()
qqmail.connect(mailhost,25)
account = '×××××××××@qq.com' # 因为是自己发给自己,所以邮箱账号、密码都可以提前设置好,当然,也可以发给别人啦
password = '×××××××××××××××' # 因为是自己发给自己,所以邮箱账号、密码都可以提前设置好,当然,也可以发给别人啦。
qqmail.login(account,password)
receiver='×××××××××@qq.com' # 因为是自己发给自己,所以邮箱账号、密码都可以提前设置好,当然,也可以发给别人啦。
message = MIMEText(contents, 'plain', 'utf-8')
subject = '电影链接'
message['Subject'] = Header(subject, 'utf-8')
try:
qqmail.sendmail(account, receiver, message.as_string())
print ('邮件发送成功')
except:
print ('邮件发送失败')
qqmail.quit() def job():
get_movielist()
contents=get_randommovie()
send_movielink(contents) schedule.every().friday.at("18:00").do(job)while True:
schedule.run_pending()
time.sleep(1)

28、周末看电影(每周五自动从top250中随机选取三部电影,并将下载链接发到邮箱里)的更多相关文章

  1. 人一生必看的100部电影(全球最佳电影排名榜TOP250)

    人一生必看的100部电影(全球最佳电影排名榜TOP250) 人的一生能看多少部电影?假设我们每周都看一部,从10岁看到80岁将会看3640部.但是我们也不可能喜欢这全部的电影.大多数的可能,我们会根据 ...

  2. Huginn实现自动通过slack推送豆瓣高分电影

    博客搬迁至https://blog.wangjiegulu.com RSS订阅:https://blog.wangjiegulu.com/feed.xml 原文链接:https://blog.wang ...

  3. 【VIP视频网站项目】VIP视频网站项目v1.0.3版本发布啦(程序一键安装+电影后台自动抓取+代码结构调整)

    在线体验地址:http://vip.52tech.tech/ GIthub源码:https://github.com/xiugangzhang/vip.github.io 项目预览 主页面 登录页面 ...

  4. python 电影下载链接爬虫

    V1.0 功能:从比较知名的几个电影下载网站爬取下载链接,并自动打印出来: 代码: # -*- coding: utf8 -*- from bs4 import BeautifulSoup impor ...

  5. asp自动解析网页中的图片地址,并将其保存到本地服务器

    程序实现功能:自动将远程页面的文件中的图片下载到本地. 程序代码 <% '将本文保存为 save2local.asp '测试:save2local.asp?url=http://ent.sina ...

  6. 使用htmlparse爬虫技术爬取电影网页的全部下载链接

    昨天,我们利用webcollector爬虫技术爬取了网易云音乐17万多首歌曲,而且还包括付费的在内,如果时间允许的话,可以获取更多的音乐下来,当然,也有小伙伴留言说这样会降低国人的知识产权保护意识,诚 ...

  7. 使用htmlparser爬虫技术爬取电影网页的全部下载链接

    昨天,我们利用webcollector爬虫技术爬取了网易云音乐17万多首歌曲,而且还包括付费的在内,如果时间允许的话,可以获取更多的音乐下来,当然,也有小伙伴留言说这样会降低国人的知识产权保护意识,诚 ...

  8. thinkphp模型中的获取器和修改器(根据字段名自动调用模型中的方法)

    thinkphp模型中的获取器和修改器(根据字段名自动调用模型中的方法) 一.总结 记得看下面 1.获取器的作用是在获取数据的字段值后自动进行处理 2.修改器的作用是可以在数据赋值的时候自动进行转换处 ...

  9. 学习Java必看的Java书籍(高清中文最新版附下载链接)

    今年下半年,我正式系统地学习Java(之前学习C++).最近把学习Java所用到的书籍整理了一下,分享出来,希望对正在学习或准备学习Java的人有一定的帮助. 关于Java的学习路线,和IDE工具In ...

随机推荐

  1. spring-ApplicationContext的事件传播(转)

    ApplicationContext中的事件处理是通过ApplicationEvent类和ApplicationListener接口来提供的,通过ApplicationContext的publishE ...

  2. jsvnadmin访问一直登陆 找不到用户

    报错:AH01618: user zhangsan not found: /svn/hangzhi 在svnadmin控制台上将用户分好组,不然即使有账户也登不上

  3. centos6.4编译gcc6.4

    #!/bin/bash dir=$(pwd) echo $dir cd $dir #wget https://gmplib.org/download/gmp/gmp-6.1.2.tar.xz .tar ...

  4. ffmpeg命令合流声卡和麦克风声音进行直播

    ffmpeg -f dshow -i audio=:duration=first:dropout_transition= -f dshow -i video= -ac -f flv -y d:/tes ...

  5. c++11多线程---线程锁(mutex)

    #include<mutex> 包含四类锁: 1      std::mutex    最基本也是最常用的互斥类 2      std::recursive_mutex  同一线程内可递归 ...

  6. NOIP考前知识点整理

    前言:距离NOIP还有不到一百天(虽然NOIP没了),为了整理一下所学的内容,才有了这篇博文.本文内容无特殊说明全部来自于博主的博客,代码也都是新敲的,努力在个人的码风基础上做到尽量简洁,求资瓷. 一 ...

  7. vue 钩子函数中获取不到DOM节点

    原文链接:https://jingyan.baidu.com/article/f96699bbfe9c9d894f3c1b4b.html 两种解决方案: 1:官方解决方案: 受到 HTML 本身的一些 ...

  8. SparseLDA算法

    2 SparseLDA算法 本章将介绍一种Gibbs Sampling算法的加速算法——SparseLDA [9],它主要利用LDA 模型的稀疏性,来达到加速以及节省内存的目的,是一种精确算法(没有近 ...

  9. python 生成excel,并下载到本地

    from django.shortcuts import reverse,redirect,render from operations import models import xlwt impor ...

  10. No module named 'pip'

    https://blog.csdn.net/wuyepiaoxue789/article/details/84033651 可以首先执行  python -m ensurepip  然后执行 pyth ...