Python实战 爬虫抓取猫眼电影排行榜

本节使用 Python 爬虫抓取猫眼电影网 TOP100 排行榜(https://maoyan.com/board/4)影片信息,包括电影名称、上映时间、主演信息。

在开始编写程序之前,首先要确定页面类型(静态页面或动态页面),其次找出页面的 url 规律,最后通过分析网页元素结构来确定正则表达式,从而提取网页信息。

确定页面类型

点击右键查看页面源码,确定要抓取的数据是否存在于页面内。通过浏览得知要抓取的信息全部存在于源码内,因此该页面输属于静态页面。如下所示:

1.<div class="movie-item-info">
   2.     <p class="name"><a href="/films/1200486" title="我不是药神" data-act="boarditem-click" data-val="{movieId:1200486}">我不是药神</a></p>
      3.  <p class="star">
         4.       主演:徐峥,周一围,王传君
        5.</p>
6.<p class="releasetime">上映时间:2018-07-05</p></div>

确定url规律

想要确定 url 规律,需要您多浏览几个页面,然后才可以总结出 url 规律,如下所示:

**

第一页:https://maoyan.com/board/4?offset=0
第二页:https://maoyan.com/board/4?offset=10
第三页:https://maoyan.com/board/4?offset=20
...
第n页:https://maoyan.com/board/4?offset=(n-1)*10

确定正则表达式

通过分析网页元素结构来确定正则表达式,如下所示:

  1.      <p class="name"><a href="/films/1200486" title="我不是药神"data-act="boarditem-click" data-val="{movieId:1200486}">我不是药神</a></p>
    
  2.      <p class="star">
    
  3.              主演:徐峥,周一围,王传君
    
  4.      </p>
    
  5. 上映时间:2018-07-05

使用 Chrome 开发者调试工具来精准定位要抓取信息的元素结构。之所以这样做,是因为这能避免正则表达式的冗余,提高编写正则表达式的速度。正则表达式如下所示:

**

<div class="movie-item-info">.*?title="(.*?)".*?class="star">(.*?)</p>.*?releasetime">(.*?)</p>

编写正则表达式时将需要提取的信息使用(.*?)代替,而不需要的内容(包括元素标签)使用.*?代替。

编写爬虫程序

下面使用面向对象的方法编写爬虫程序,主要编写四个函数,分别是请求函数、解析函数、保存数据函数、主函数。

  1. from urllib import request
  2. import re
  3. import time
  4. import random
  5. import csv
  6. from ua_info import ua_list
  7. 定义一个爬虫类

  8. class MaoyanSpider(object):
  9. 初始化

  10. 定义初始页面url

  11.  def __init__(self):
    
  12.      self.url = 'https://maoyan.com/board/4?offset={}'
    
  13. 请求函数

  14.  def get_html(self,url):
    
  15.      headers = {'User-Agent':random.choice(ua_list)}
    
  16.      req = request.Request(url=url,headers=headers)
    
  17.      res = request.urlopen(req)
    
  18.      html = res.read().decode()
    
  19.      # 直接调用解析函数
    
  20.      self.parse_html(html)
    
  21. 解析函数

  22.  def parse_html(self,html):
    
  23. 正则表达式

  24.      re_bds = '<div class="movie-item-info">.*?title="(.*?)".*?<p class="star">(.*?)</p>.*?class="releasetime">(.*?)</p>'
    
  25. 生成正则表达式对象

  26.      pattern = re.compile(re_bds,re.S)
    
  27.      # r_list: [('我不是药神','徐峥,周一围,王传君','2018-07-05'),...] 列表元组
    
  28.      r_list = pattern.findall(html)
    
  29.      self.save_html(r_list)
    
  30.  # 保存数据函数,使用python内置csv模块
    
  31.  def save_html(self,r_list):
    
  32. #生成文件对象
  33.      with open('maoyan.csv','a',newline='',encoding="utf-8") as f:
    
  34. #生成csv操作对象
  35.          writer = csv.writer(f)
    
  36. #整理数据
  37.          for r in r_list:
    
  38.              name = r[0].strip()
    
  39.              star = r[1].strip()[3:]
    
  40.              # 上映时间:2018-07-05
    
  41. 切片截取时间

  42.              time = r[2].strip()[5:15]
    
  43.              L = [name,star,time]
    
  44. 写入csv文件

  45.              writer.writerow(L)
    
  46.              print(name,time,star)
    
  47. 主函数

  48.  def run(self):
    
  49. #抓取第一页数据
  50.      for offset in range(0,11,10):
    
  51.          url = self.url.format(offset)
    
  52.          self.get_html(url)
    
  53.          #生成1-2之间的浮点数
    
  54.          time.sleep(random.uniform(1,2))
    
  55. 以脚本方式启动

  56. if name == ‘main’:
  57.  #捕捉异常错误
    
  58.  try:
    
  59.      spider = MaoyanSpider()
    
  60.      spider.run()
    
  61.  except Exception as e:
    
  62.      print("错误:",e)
    

输出结果:

我不是药神 2018-07-05 徐峥,周一围,王传君
肖申克的救赎 1994-09-10 蒂姆·罗宾斯,摩根·弗里曼,鲍勃·冈顿
绿皮书 2019-03-01 维果·莫腾森,马赫沙拉·阿里,琳达·卡德里尼
海上钢琴师 2019-11-15 蒂姆·罗斯,比尔·努恩,克兰伦斯·威廉姆斯三世
小偷家族 2018-08-03 中川雅也,安藤樱,松冈茉优
霸王别姬 1993-07-26 张国荣,张丰毅,巩俐
哪吒之魔童降世 2019-07-26 吕艳婷,囧森瑟夫,瀚墨
美丽人生 2020-01-03 罗伯托·贝尼尼,朱斯蒂诺·杜拉诺,赛尔乔·比尼·布斯特里克
这个杀手不太冷 1994-09-14 让·雷诺,加里·奥德曼,娜塔莉·波特曼
盗梦空间 2010-09-01 莱昂纳多·迪卡普里奥,渡边谦,约瑟夫·高登-莱维特

这里给大家分享一份Python全套学习资料,包括学习路线、软件、源码、视频、面试题等等,都是我自己学习时整理的,希望可以对正在学习或者想要学习Python的朋友有帮助!

CSDN大礼包:全网最全《全套Python学习资料》免费分享🎁

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉CSDN大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

1️⃣零基础入门

① 学习路线

对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

2️⃣国内外Python书籍、文档

① 文档和书籍资料

在这里插入图片描述

3️⃣Python工具包+项目源码合集

①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

4️⃣Python面试题

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

5️⃣Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
上述所有资料 ⚡️ ,朋友们如果有需要 📦《全套Python学习资料》的,可以扫描下方二维码免费领取 🆓
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉CSDN大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值