python3-爬虫---猫眼电影榜单爬虫实战

本文详细介绍了如何使用Python爬取猫眼电影的TOP100榜单信息,包括观察网页特征、编写爬虫程序(涉及requests、re和time库)、结果展示和可能出现的问题分析。在解析HTML时,通过正则表达式或更精确的匹配方法获取电影的片名、主演、上映时间和评分等信息,并讨论了翻页规则和数据存储。文章还提到了版本1解析错误的原因及解决方案,并分享了BeautifulSoup库的使用体验。
摘要由CSDN通过智能技术生成

猫眼电影榜单爬虫实战

一、观察目标网页特征

1.1. 观察下猫眼电影网站及其代码。传送门:猫眼网站首页
1.2. 选择【榜单】页面,可以看到有五个榜,分别是【热映口碑】,【最受期待】,【国内票房】,【北美票房】和【TOP 100】,基本上根据自己的需求来选择哪个榜单,每个榜单信息的主要差异在于显示的是评分,想看人数还是票房。【这里选择TOP 100 榜进行实战分析,对应的网页链接记得自己查看当前的URL】

猫眼电影-榜单-TOP100榜页面:猫眼电影-榜单-TOP100榜页面
1.3. 查看网页HTML:爬虫一般来讲是可见即可爬,那么爬取的内容一般来自于网页的HTML。在浏览器页面鼠标右键选择【查看网页源代码】,会出现新的窗口,就是当前页面的HTML内容。到这一步看到的HTML内容和之前看到的也main内容一样,那就基本上问题不难了,掌握基本的爬虫知识就可以解决了。

HTML页面图:
在这里插入图片描述在这里插入图片描述

二、爬虫程序

这里用到的库有,requests,re,time
2.1 获取页面HTML函数

def get_html(Url):#定义一个函数来获取对应Url的页面HTML
    import requests,time
    cookies='XXX'#换成对应的cookies
    user-agent='XXX'#换车对应的user-agent
   headers={
   
    'user-agent':user-agent,
    'cookies':cookies
    }#对请求头部信息进行赋值
    time.sleep(1)#爬取页面设置睡眠时间
    r=requests.get(Url,headers=headers)
    if r.status_code==200:
        r.encoding='utf-8'
        html=r.text
        return(html)#如果页面链接无误,就返回对应的HTML内容
    else:
        print("request"+Url+"FAILED")
        return None #连接错误,返回None

2.2 解析HTML,得到想要的字段信息
下面图片截取了两部电影的信息,不难发现,每部电影信息都是在一组
《dd 》XXXXX 《/dd》之间,包含的信息有片名,主演,上映时间,评分。
在这里插入图片描述
根据对HTML的分析,写代码,提取目标字段

  • 版本1:用正则表达式直接表示全部信息字段的解析方法(会出现一点错误)
    对应代码:
#=========================版本1============================
def get_info(HTML):#传入特定的一个页面的HTML信息
    import re 
    pattern= '<a href.*?title="(.*?)" class="image-link".*?<img data-src="(.*?)" alt.*?</a>.*?<p class="star">.*?(主演:.*?)</p>.*?<p class="releasetime">(上映时间:.*?)</p>.*?</div>'#定义了提取信息的模式,结合re库,就能提取到片名,头图链接,主演信息,上映时间(评分这里忽略了没写,但是逻辑是一样的)
    infos=re.findall(pattern,HTML,re.S) 
    '''findall返回的是一个列表,re.S的功能是忽略换行符,
    因为在pattern中没有具体到每一个换行信息,也没必要涉及'''
    result=[]
    for info in infos:#当前页面的每部电影遍历
        title=info[0].strip()
        pic_link=info[1].strip()
        star=info[2].strip()
        release_time=info[3].strip()
        new=(index,title,pic_link,star,release_time)
        #每部电影的信息生成一个元组new
        result.append(new)
    return result
  • 版本2,将每个字段信息都精确的匹配,目前没有发现问题
#=====================版本2=======================
def get_info(HTML):#定义一个函数解析当前页面HTML的信息
    import re 
    info_pattern='<dd>.*?<i class="board-index board-index-.*?">\d+</i>.*?</dd>'#先按照每部电影信息进行整理
    infos=re.findall(info_pattern,HTML,re.S)
    #返回一个列表,其中的元素为每部电影
    #以下定义每个字段的匹配模式
    index_pattern='<dd>.*?<i class="board-index board-index-.*?">(\d+)</i>'#序号字段
    title_pattern='<a href.*?title="(.*?)" class="image-link"'#片名字段
    pic_link_pattern='<img data-src="(.*?)" alt.*?</a>'#头图链接
    star_pattern='<p class="star">.*?(主演:.*?)</p>'#主演
    release_time_pattern='<p class="releasetime">(上映时间:.*?)</p>.*?</div>.*?</dd>'#上映时间
    result=[
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值