爬虫实践---电影排行榜

哈哈!经过几天的学习,已经可以自己独立地慢慢的来写”蜘蛛侠“了,加油!


电影网站: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']



对于电影名称,在每一个li里面,
<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()



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值