本文利用requests库和正则表达式爬取了猫眼电影TOP100电影信息,并将电影封面和标题、主演等文字信息保存在了本地。本文完整代码链接:https://github.com/iapcoder/MaoYanTop100。运行里面的spider.py即可。


一、目标

  1. 练习使用正则表达式
  2. 使用python爬虫的库requests
  3. 爬取猫眼电影TOP100榜中电影的标题、主演、上映时间、评分、图片链接等信息
  4. 将每部电影的图片保存在imgs文件夹里,标题、主演等信息保存在results.txt里

二、 效果展示

三、爬虫分析

1.链接分析

抓取的网站为:https://maoyan.com/board/4,打开后便可以看到如下信息:

首页信息

该页面显示的已经包含我们所需要的信息。 拉到页面下方,发现一共有10页,点击第二页,网页的链接变为:https://maoyan.com/board/4?offset=10,点击第三页链接变为:https://maoyan.com/board/4?offset=20,分析规律可以得出第i页的链接为http://maoyan.com/board/4?offset=10*(i-1)。

2.抓包分析

# -*- coding: utf-8 -*-import requestsdef main():headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}url = 'https://maoyan.com/board/4'response = requests.get(url, headers=headers).content.decode()print(response)if __name__ == '__main__':main()

运行上面代码,便可获取该链接的网页源代码,另一个简单的分析方法就式利用Chrome浏览器的开发者工具,注:不要在Elements选项卡里查看源代码,因为这是经过javascript渲染过的,不是我们通过爬虫获取的源代码,需要在Network选项卡里查看。

3.正则提取

在Network选项卡里查看源代码,分析可知每一部电影的信息用一组<dd></dd>标签包裹,打开其中一个标签,如下图

分析可知:

排名信息是在class为'board-index'的i标签内,因此正则表达式为:

<dd>.*?board-index.*?>(.*?)</i>.*?</dd>

图片链接 信息是在a标签下class为data-src的img标签里,正则表达式为:

<dd>.*?data-src="(.*?)".*?</dd>

电影名称信息是在class为name的p标签的a节点里,正则表达式为:

<dd>.*?name.*?a.*?>(.*?)</a>.*?</dd>

演员信息是在class为star的p标签里,正则表式为:

<dd>.*?star.*?>(.*?)</p>.*?</dd>

上映时间是在class为releasetime的p标签里,正则表达式为:

<dd>.*?releasetime.*?>(.*?)</p>.*?</dd>

评分是在class为score的i标签里,其中包括整数部分和小数部分,正则表达式为:

<dd>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i>.*?</dd>

接下来,通过正则便可以提取相应的内容信息了

def get_one_page(url, headers):response = requests.get(url, headers=headers)html_str = response.content.decode()pattern = re.compile('<dd>.*?board-index.*?>(.*?)<.*?data-src="(.*?)".*?name.*?a.*?>(.*?)</a>.*?star.*?>(.*?)</p>.*?releasetime.*?>(.*?)</p>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i>.*?</dd>',re.S)items = re.findall(pattern, html_str)for item in items:yield {'rank': item[0],  # 排名'img_url': item[1],  # 图片链接'title': item[2],  # 电影名字'actors': item[3].strip(),  # 主演'date': item[4],  # 上映时间'score': item[5] + item[6]  # 评分}

四、保存图片和电影名字等信息到本地

1.保存图片信息到本地

def save_imgs(item, headers):response = requests.get(item['img_url'], headers=headers).contentwith open('./results/imgs/'+item['rank']+'_'+item['title']+'.jpg', 'wb') as f:f.write(response)

2.保存标题等信息到本地

def write2txt(item, save_path):with open(save_path, 'a', encoding='utf-8') as f:f.write(json.dumps(item, ensure_ascii=False, indent=2)+'\n')

五、分页爬取

def main():headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}path = './results/imgs'if not os.path.exists(path):os.makedirs(path)url = 'https://maoyan.com/board/4?offset={}'for i in range(0,100,10):items = get_one_page(url.format(str(i)), headers)for item in items:print(item)write2txt(item, './results/result.txt') #写入文本save_imgs(item, headers) # 保存图片

到这里就可以爬取整个TOP100的电影信息里,打开results文件夹里的result.txt可以看到如下信息:

利用正则表达式爬取猫眼电影TOP100信息相关推荐

  1. 爬虫从头学之Requests+正则表达式爬取猫眼电影top100

    爬取思路 当我们想要爬取一个页面的时候,我们要保证思路清晰,爬虫的思路分四个步骤,发起请求,获取响应内容,解析内容,存储内容.根据这四个内容我们的思路就很清晰.以下为具体步骤 使用requests库爬 ...

  2. python爬取猫眼_python正则表达式爬取猫眼电影top100

    用正则表达式爬取猫眼电影top100,具体内容如下 #!/usr/bin/python # -*- coding: utf-8 -*- import json # 快速导入此模块:鼠标先点到要导入的函 ...

  3. Requests+正则表达式爬取猫眼电影(TOP100榜)

    猫眼电影网址:www.maoyan.com 前言:网上一些大神已经对猫眼电影进行过爬取,所用的方法也是各有其优,最终目的是把影片排名.图片.名称.主要演员.上映时间与评分提取出来并保存到文件或者数据库 ...

  4. python3 爬取猫眼电影Top100信息(正则+requests)

    import json from multiprocessing.dummy import Pool import requests import redef get_one_page(url):# ...

  5. requests+正则表达式爬取猫眼电影TOP100

    代码: 1 import json 2 from multiprocessing import Pool 3 import requests 4 # http://cn.python-requests ...

  6. python爬虫入门练习:BeautifulSoup爬取猫眼电影TOP100排行榜,pandas保存本地excel文件

    传送门:[python爬虫入门练习]正则表达式爬取猫眼电影TOP100排行榜,openpyxl保存本地excel文件 对于上文使用的正则表达式匹配网页内容,的确是有些许麻烦,替换出现任何的差错都会导致 ...

  7. (爬取猫眼电影TOP100的电影信息(含图片、评分等))

    爬取猫眼电影TOP100的电影信息(含图片.评分等) 让我们直接进入正题 1.导入需要的库 2.获取页面 3.分析页面 4.保存文件 全部代码 让我们直接进入正题 对猫眼电影的网站进行分析 其链接为: ...

  8. Python爬虫之requests+正则表达式抓取猫眼电影top100以及瓜子二手网二手车信息(四)...

    requests+正则表达式抓取猫眼电影top100 一.首先我们先分析下网页结构 可以看到第一页的URL和第二页的URL的区别在于offset的值,第一页为0,第二页为10,以此类推. 二.< ...

  9. 猫眼html源码,50 行代码教你爬取猫眼电影 TOP100 榜所有信息

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 今天,手把手教你入门 Python 爬虫,爬取猫眼电影 TOP100 榜信息. 作者 | 丁 ...

最新文章

  1. pandas使用resample进行不同粒度下的时间特征重构实战:构建时间维度统计特征
  2. 一个通俗易懂的HMM例子
  3. Java特性-Collection和Map
  4. ACM-ICPC 2017 Asia Nanning
  5. 【转】Epoll模型
  6. linux如何利用命令保存文件,如何在Linux中将命令输出保存到文件?
  7. P1547 Out of Hay
  8. 昔年浅谈成都的百度推广公司靠谱吗这个问题?!
  9. 前端工程化-webpack-cli(官方开发中。。。)
  10. 基于物品的协同过滤算法实现图书推荐系统
  11. 是否开启谷歌Ad广告中的搜索网络合作伙伴?
  12. Choco安装npm
  13. JavaApi.Date
  14. python避坑_使用Python时多少有人走过的坑!避险!
  15. idea模块加载失败
  16. 无法控制SpringBoot 中的DEBUG日志
  17. 【Python】多线程及threading模块介绍
  18. 中科大郭光灿院士团队开发出量子门测试新方法
  19. 阿里云ECS系统盘镜像备份恢复到本地VMware
  20. 山东省2022 年专升本 计算机大纲(新一代信息技术)

热门文章

  1. VS 2010/2015 旗舰版 启动报错 Key Required
  2. display与transition动画冲突问题
  3. 前端开发常用到的flex布局简单范例
  4. element ui dataTimePiker日期时间选择器控制选择范围及时间转换总结
  5. 算法训练营 搜索技术(深度优先搜索)
  6. blender基础,制作台灯,花瓶,椅子,吉普车
  7. Linux SID 开发指南
  8. sudo 命令_su、sudo、sudo su、sudo -i的用法和区别
  9. Linux的super super super easy教程 | vim文本编辑器 1
  10. python日期比较大小_js中怎么比较两个日期