哈哈!经过几天的学习,已经可以自己独立地慢慢的来写”蜘蛛侠“了,加油!
电影网站:http://dianying.2345.com/top/
首先对于网站进行浏览,查看一下网页大概信息。
对于大体框架来看,电影有元素---海报,电影名称,上映时间,主演,故事简介。
观察发现,电影排行榜在class=“picList clearfix"下进行展开的,每一个电影有一个li构成。
首先在class="pic"中,是关于电影的海报。观察看到src='http://imgwx4.2345.com/dypcimg/tv/newimages/default_poster.jpg'图片的格式.jpg。在第一次写程序时,照片按png格式存储时发现下载后打开显示不了,在src中发现了照片是.jpg格式,修改后发现可以打开查看了。
<div class="pic">
<img οnerrοr="javascript:this.src='http://imgwx4.2345.com/dypcimg/tv/newimages/default_poster.jpg'" src="http://imgwx5.2345.com/dypcimg/img/e/56/sup168230_223x310.jpg?1500888030" alt="记忆大师" title="记忆大师" width="130" height="173">
<i class="iNum iLightNum"><em>TOP</em>1</i>
<a class="aPlayBtn" href="http://dianying.2345.com/detail/168230.html" target="_blank" title="记忆大师"><i></i></a>
</div>
图片链接获取:
img_url = li.find('img')['src']
<span class="sTit"><a href="http://dianying.2345.com/detail/168230.html" target="_blank">记忆大师</a></span>
电影名称的获取:
name = li.find('span',attrs={'class': ''sTit'}).a.text
# name = li.find('span',class_='sTit').a.text
电影上映时间的获取:
我们观察发现,有的电影没有上映时间,所以我们在此处进行一个异常获取
对于具有上映时间的:
<p class="pTit"><span class="sTit"><a href="http://dianying.2345.com/detail/168230.html" target="_blank">记忆大师</a></span>
<span class="sIntro">上映时间:2017-04-28</span </p>
上映时间未知的:
<span class="sTit"><a href="http://dianying.2345.com/detail/193882.html" target="_blank">许我爱你</a></span>
电影主演的获取:
<p class="pActor">主演:<a target="_blank" href="http://dianying.2345.com/list/---huangbo---.html" title="黄渤">黄渤</a><a target="_blank" href="http://dianying.2345.com/list/---xujinglei---.html" title="徐静蕾">徐静蕾</a><a target="_blank" href="http://dianying.2345.com/list/---duanzuohong---.html" title="段奕宏">段奕宏</a></p>
一部电影的主演存在着多位,可以利用一个循环读取主演。
actors = li.find('p',attrs={'class':'pActor'})
actor = ''
for act in actors.contents:
actor = actor + act.string+' '
对于之前版本的程序读取的电影简介版本,有了一点小小的修改,同样利用异常处理来进行电影简介的读取:
<p class="pTxt pIntroHide" style="display:none">简介:故事发生在2025年,因为和妻子张代晨(徐静蕾 饰)婚姻破裂,男主角江丰(黄渤 饰)走进记忆大师医疗中心接受手术,却不料手术失误记忆被错误重载,他莫名其妙变成了“杀人凶手”。警官沈汉强(段奕宏 饰)的穷追不舍让他逐渐发现,自己脑内的错误记忆不仅是破案的关键,更是救赎自己的唯一希望。与此同时,妻子身边出现的女人陈姗姗(杨子姗 饰)、记忆中浮现出的神秘女子(许玮甯 饰),似乎也和真相有着千丝万缕的联系,一场记忆烧脑战也随之开始。 <a href="javascript:void(0);" target="_self" class="aMore pIntroHideMore">收起全部 <i class="iconfont"></i></a></p>
try:
#intro = li.find('p',attrs={'class':'pTxt pIntroShow'}).text
intro = li.find('p', attrs={'style':'display:none'}).text
except:
intro = li.find('p',attrs={'class':'pTxt pIntroShow'}).text
最后,对于获取到 图片链接进行下载:
# 下载图片
with open('电影排行/'+name+'.jpg','wb+') as f:
# 观察网页信息可知,图片格式时jpg而非png
f.write(requests.get(img_url).content)
#!/usr/bin/env python # coding=utf-8 import bs4 import requests def get_html(url): try: r = requests.get(url,timeout=30) r.raise_for_status r.encoding = r.apparent_encoding return r.text except: print('Open Error!') # 爬取电影名称 主演 时间 简介 def get_content(url): # 将爬取的信息保存到本地 html = get_html(url) soup = bs4.BeautifulSoup(html,'lxml') movies_list = soup.find('ul',attrs={'class':'picList clearfix'}) movies = movies_list.find_all('li') # 找到所有的电影 # 循环里遍历电影 for li in movies: # 找到图片链接 img_url = li.find('img')['src'] name = li.find('span',class_='sTit').a.text # 这里一个异常捕获,防止出现上映时间暂无的情况 try: time = li.find('span',attrs={'class': 'sIntro'}).text except: time = "暂无上映时间" actors = li.find('p',attrs={'class':'pActor'}) actor = '' for act in actors.contents: actor = actor + act.string+' ' # 找到影片的简介完整版 try: #intro = li.find('p',attrs={'class':'pTxt pIntroShow'}).text intro = li.find('p', attrs={'style':'display:none'}).text except: intro = li.find('p',attrs={'class':'pTxt pIntroShow'}).text print("片名:{}\t{}\n{}\n{} \n \n ".format(name,time,actor,intro)) # 下载图片 with open('电影排行/'+name+'.jpg','wb+') as f: # 观察网页信息可知,图片格式时jpg而非png f.write(requests.get(img_url).content) def main(): url = 'http://dianying.2345.com/top/' get_content(url) if __name__ == "__main__": main()