首页 > 其他 > 详细

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

时间:2019-05-12 01:20:53      阅读:297      评论:0      收藏:0      [点我收藏+]
 
练习介绍
 
在第3关的一个课后练习里,我们爬取了指定电影的下载链接;在第6关的一个课后练习里,我们存储了豆瓣TOP250的榜单信息。
 
现在,我们完善这个程序,每周五在存储的榜单中,随机抽三部电影,然后去爬取这三部电影的下载链接,并把链接的结果发送到邮箱。
 
这样一来,我们就可以选择一部电影在周末欣赏啦。
 
 1 import requests
 2 import time
 3 import schedule
 4 import smtplib
 5 import numpy
 6 from urllib.request import quote
 7 from bs4 import BeautifulSoup
 8 from email.mime.text import MIMEText
 9 from email.header import Header
10 
11 def fun_top250_3():
12 
13     movie_names = []
14 
15     for i in numpy.random.randint(0,249,3):
16         res = requests.get(https://movie.douban.com/top250?start={}.format(i))
17         soup = BeautifulSoup(res.text,html.parser)
18         item = soup.find(div,class_=item).find(span).text
19         movie_names.append(item)
20 
21     return movie_names
22 
23 def fun_download_url():
24 
25     movie_names = fun_top250_3()
26 
27     movie_names_urls = ‘‘
28 
29     for i in movie_names:
30         key_word = quote(i,encoding=gbk)
31         res = requests.get(http://s.ygdy8.com/plus/so.php?typeid=1&keyword={}.format(key_word))
32         res.encoding=gbk
33         soup = BeautifulSoup(res.text,html.parser)
34         check_none = soup.find(div,class_=co_content8).find(table)
35 
36         if check_none:
37             item = soup.find(td,width=55%).find(b).find(a)
38             res = requests.get(https://www.ygdy8.com+item[href])
39             res.encoding=gbk
40             soup = BeautifulSoup(res.text,html.parser)
41             item = soup.find(td,style=WORD-WRAP: break-word).find(a).text
42             movie_names_urls += 电影名:{}\t下载链接:{}\n.format(i,item)
43         else:
44             movie_names_urls += 电影名:{}\t下载链接:没有找到\n.format(i)
45 
46     return movie_names_urls
47 
48 def fun_sendmail():
49 
50     movie_names_urls = fun_download_url()
51 
52     mail_user = www1707@xxx.cn
53     mail_pwd  = yyy
54     receiver  = user01@xxx.cn
55     subject   = time.strftime(%Y{}%W{}%S).format(年 第,周 推荐电影)
56     content   = movie_names_urls
57 
58     alimail = smtplib.SMTP()
59     alimail.connect(smtp.qiye.aliyun.com,25)
60     alimail.login(mail_user,mail_pwd)
61 
62     message = MIMEText(content,plain,utf-8)
63     message[Subject] = Header(subject,utf-8)
64     message[From]    = Header(mail_user,utf-8)
65     message[To]      = Header(receiver,utf-8)
66 
67     alimail.sendmail(mail_user,receiver,message.as_string())
68     alimail.quit()
69 
70     print(movie_names_urls)
71 
72 #schedule.every().friday.do(fun_sendmail())
73 schedule.every(10).seconds.do(fun_sendmail)
74 
75 while True:
76     schedule.run_pending()
77     time.sleep(1)

技术分享图片

老师的答案
 1 import requests,csv,random,smtplib,schedule,time
 2 from bs4 import BeautifulSoup
 3 from urllib.request import quote
 4 from email.mime.text import MIMEText
 5 from email.header import Header
 6 
 7 def get_movielist():
 8     csv_file=open(movieTop.csv, w, newline=‘‘,encoding=utf-8)
 9     writer = csv.writer(csv_file)
10     for x in range(10):
11         url = https://movie.douban.com/top250?start= + str(x*25) + &filter=
12         res = requests.get(url)
13         bs = BeautifulSoup(res.text, html.parser)
14         bs = bs.find(ol, class_="grid_view")
15         for titles in bs.find_all(li):
16             title = titles.find(span, class_="title").text
17             list1 = [title]
18             writer.writerow(list1)
19     csv_file.close()
20 
21 def get_randommovie():
22     movielist=[]
23     csv_file=open(movieTop.csv,r,newline=‘‘,encoding=utf-8)
24     reader=csv.reader(csv_file)
25     for row in reader:
26         movielist.append(row[0])
27     three_movies=random.sample(movielist,3)
28     contents=‘‘
29     for movie in three_movies:
30         gbkmovie = movie.encode(gbk)
31         urlsearch = http://s.ygdy8.com/plus/so.php?typeid=1&keyword=+quote(gbkmovie)
32         res = requests.get(urlsearch)
33         res.encoding=gbk
34         soup_movie = BeautifulSoup(res.text,html.parser)
35         urlpart=soup_movie.find(class_="co_content8").find_all(table)
36         if urlpart:
37             urlpart=urlpart[0].find(a)[href]
38             urlmovie=https://www.ygdy8.com/+urlpart
39             res1=requests.get(urlmovie)
40             res1.encoding=gbk
41             soup_movie1=BeautifulSoup(res1.text,html.parser)
42             urldownload=soup_movie1.find(div,id="Zoom").find(span).find(table).find(a)[href]
43             content=movie+\n+urldownload+\n\n
44             print(content)
45             contents=contents+content
46         else:
47             content=没有+movie+的下载链接
48             print(content)
49     return contents
50 
51 def send_movielink(contents):
52     mailhost=smtp.qq.com
53     qqmail = smtplib.SMTP()
54     qqmail.connect(mailhost,25)
55     account = ×××××××××@qq.com # 因为是自己发给自己,所以邮箱账号、密码都可以提前设置好,当然,也可以发给别人啦
56     password = ××××××××××××××× # 因为是自己发给自己,所以邮箱账号、密码都可以提前设置好,当然,也可以发给别人啦。
57     qqmail.login(account,password)
58     receiver=×××××××××@qq.com  # 因为是自己发给自己,所以邮箱账号、密码都可以提前设置好,当然,也可以发给别人啦。
59     message = MIMEText(contents, plain, utf-8)
60     subject = 电影链接
61     message[Subject] = Header(subject, utf-8)
62     try:
63         qqmail.sendmail(account, receiver, message.as_string())
64         print (邮件发送成功)
65     except:
66         print (邮件发送失败)
67     qqmail.quit()
68 
69 def job():
70     get_movielist()
71     contents=get_randommovie()
72     send_movielink(contents)
73 
74 schedule.every().friday.at("18:00").do(job)while True:
75     schedule.run_pending()
76     time.sleep(1)

 技术分享图片

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

原文:https://www.cnblogs.com/www1707/p/10850662.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!