栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【python教程入门学习】Python爬虫抓取猫眼电影排行榜

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【python教程入门学习】Python爬虫抓取猫眼电影排行榜

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

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

确定页面类型

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

    

我不是药神

主演:徐峥,周一围,王传君

上映时间:2018-07-05

确定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

确定正则表达式

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

    

我不是药神

主演:徐峥,周一围,王传君

上映时间:2018-07-05

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

.*?title="(.*?)".*?>(.*?).*?releasetime">(.*?)

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

编写爬虫程序

下面使用面向对象的方法编写爬虫程序,主要编写四个函数,分别是请求函数、解析函数、保存数据函数、主函数。最后,如果你的时间不是很紧张,并且又想快速的提高,最重要的是不怕吃苦,建议你可以价位@762459510 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~

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 = '.*?title="(.*?)".*?

(.*?) 25.

.*?>(.*?)

' 26. # 生成正则表达式对象 27. pattern = re.compile(re_bds,re.S) 28. # r_list: [('我不是药神','徐峥,周一围,王传君','2018-07-05'),...] 列表元组 29. r_list = pattern.findall(html) 30. self.save_html(r_list) 31. # 保存数据函数,使用python内置csv模块 32. def save_html(self,r_list): 33. #生成文件对象 34. with open('maoyan.csv','a',newline='',encoding="utf-8") as f: 35. #生成csv操作对象 36. writer = csv.writer(f) 37. #整理数据 38. for r in r_list: 39. name = r[0].strip() 40. star = r[1].strip()[3:] 41. # 上映时间:2018-07-05 42. # 切片截取时间 43. time = r[2].strip()[5:15] 44. L = [name,star,time] 45. # 写入csv文件 46. writer.writerow(L) 47. print(name,time,star) 48. # 主函数 49. def run(self): 50. #抓取第一页数据 51. for offset in range(0,11,10): 52. url = self.url.format(offset) 53. self.get_html(url) 54. #生成1-2之间的浮点数 55. time.sleep(random.uniform(1,2)) 56. # 以脚本方式启动 57. if __name__ == '__main__': 58. #捕捉异常错误 59. try: 60. spider = MaoyanSpider() 61. spider.run() 62. except Exception as e: 63. 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 莱昂纳多·迪卡普里奥,渡边谦,约瑟夫·高登-莱维特

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/313973.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号