python爬虫与数据可视化(一)—— 爬取猫眼电影(涉及爬虫反破解)

本文介绍了如何使用Python爬虫从猫眼电影网站获取电影详情,包括电影名称、产地、时长、评分等信息,并讨论了猫眼的反爬虫策略及破解方法。解析后的数据存储在MongoDB,并通过数据可视化库pyecharts展示了一些简单的图表分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

又是新的一年,让我们一起来看一下刚刚过去的2018留下了哪些经典影片吧!

一、获取电影详情页链接

  1. 进入猫眼官网,按图中的顺序点击,得到2018年按评分排序的影片进入猫眼官网,按图中的顺序点击,得到2018年按评分排序的影片页面
    在这里插入图片描述
    这样我们就得到了第一个爬虫链接:https://maoyan.com/films?showType=3&sortId=3&yearId=13
    这样的一页有30部电影,我们需要的肯定不止30部啦!
    点击第二页,可以看到链接变化为:https://maoyan.com/films?showType=3&sortId=3&yearId=13&offset=30
    多了一个参数,尝试把offset改为0就跳转到第一页,改为60就跳转到第3页,以此类推。
  2. 在这个页面的数据可满足不了我的需求,点击电影进入该电影的详情页,可以看到电影名称、电影产地、电影时长、电影评分、评分人数、票房等,我把这些都一并保存下来,放入MongoDB。
    在这里插入图片描述
    这个页面的链接是:https://maoyan.com/films/1200486
    后面的数字是该电影对应的id,显然我们就需要拿到这个id了,在第一个页面按下F12,定位元素,就可以看到对应的超链接,我们使用BeautifulSoup解析出来即可。
    在这里插入图片描述
    上代码:
# 访问页面
def get_page(url, headers):
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        return response.text


# 获得每个电源详细页链接
def get_film_url(html):
    soup = BeautifulSoup(html, 'html.parser')
    film_href = soup.find_all(class_='channel-detail movie-item-title')
    film_url = []
    for href in film_href:
        film_url.append('https://maoyan.com' + href.select('a')[0]['href'])
    return film_url

二、解析电影详情页

在开发者工具中可以看到数字并没有像网页上正常显示出来,这是猫眼做了反爬虫处理
在这里插入图片描述
通过ctrl+f,输入font-face,可以看到一个字体文件,通过刷新发现,每次的字体文件都是不一样的
在这里插入图片描述
详细的反破解原理我就不多说了,网上其他文章已经解释很多了,思路基本都是保存一份文件,手动识别里面的数字,以后遇到其他文件时再进行比对,这里贴上我参考的几位大佬的链接:
破解代码用的就是这篇文章里面的:https://mp.weixin.qq.com/s/n7GG8sW3aadf8o2laC3KNg
知乎大佬的文章:https://zhuanlan.zhihu.com/p/33112359
讲一下具体步骤吧:

  1. 在开发者工具选Network,选font,F5刷新一下就出现了一个.woff文件了,双击就可以保存下来,这个文件就对应为你作为基准的字体文件,代码中用的是base.woff,可以顺便把它改成这个名字
    在这里插入图片描述
  2. 打开百度字体编辑器,把刚才woff文件拖进去,就可以看到你看到的编码对应的数字是什么了
    在这里插入图片描述
  3. 看破解代码:
def get_numbers(html_response):
    """
    对猫眼的文字反爬进行破解
    """
    cmp = re.compile(",\n           url\('(//.*.woff)'\) format\('woff'\)")
    rst = cmp.findall(html_response)
    ttf = requests.get("http:" + rst[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值