利用正则表达式爬取猫眼电影TOP100信息
本文利用requests库和正则表达式爬取了猫眼电影TOP100电影信息,并将电影封面和标题、主演等文字信息保存在了本地。本文完整代码链接:https://github.com/iapcoder/MaoYanTop100。运行里面的spider.py即可。
一、目标
- 练习使用正则表达式
- 使用python爬虫的库requests
- 爬取猫眼电影TOP100榜中电影的标题、主演、上映时间、评分、图片链接等信息
- 将每部电影的图片保存在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信息相关推荐
- 爬虫从头学之Requests+正则表达式爬取猫眼电影top100
爬取思路 当我们想要爬取一个页面的时候,我们要保证思路清晰,爬虫的思路分四个步骤,发起请求,获取响应内容,解析内容,存储内容.根据这四个内容我们的思路就很清晰.以下为具体步骤 使用requests库爬 ...
- python爬取猫眼_python正则表达式爬取猫眼电影top100
用正则表达式爬取猫眼电影top100,具体内容如下 #!/usr/bin/python # -*- coding: utf-8 -*- import json # 快速导入此模块:鼠标先点到要导入的函 ...
- Requests+正则表达式爬取猫眼电影(TOP100榜)
猫眼电影网址:www.maoyan.com 前言:网上一些大神已经对猫眼电影进行过爬取,所用的方法也是各有其优,最终目的是把影片排名.图片.名称.主要演员.上映时间与评分提取出来并保存到文件或者数据库 ...
- python3 爬取猫眼电影Top100信息(正则+requests)
import json from multiprocessing.dummy import Pool import requests import redef get_one_page(url):# ...
- requests+正则表达式爬取猫眼电影TOP100
代码: 1 import json 2 from multiprocessing import Pool 3 import requests 4 # http://cn.python-requests ...
- python爬虫入门练习:BeautifulSoup爬取猫眼电影TOP100排行榜,pandas保存本地excel文件
传送门:[python爬虫入门练习]正则表达式爬取猫眼电影TOP100排行榜,openpyxl保存本地excel文件 对于上文使用的正则表达式匹配网页内容,的确是有些许麻烦,替换出现任何的差错都会导致 ...
- (爬取猫眼电影TOP100的电影信息(含图片、评分等))
爬取猫眼电影TOP100的电影信息(含图片.评分等) 让我们直接进入正题 1.导入需要的库 2.获取页面 3.分析页面 4.保存文件 全部代码 让我们直接进入正题 对猫眼电影的网站进行分析 其链接为: ...
- Python爬虫之requests+正则表达式抓取猫眼电影top100以及瓜子二手网二手车信息(四)...
requests+正则表达式抓取猫眼电影top100 一.首先我们先分析下网页结构 可以看到第一页的URL和第二页的URL的区别在于offset的值,第一页为0,第二页为10,以此类推. 二.< ...
- 猫眼html源码,50 行代码教你爬取猫眼电影 TOP100 榜所有信息
点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 今天,手把手教你入门 Python 爬虫,爬取猫眼电影 TOP100 榜信息. 作者 | 丁 ...
最新文章
- pandas使用resample进行不同粒度下的时间特征重构实战:构建时间维度统计特征
- 一个通俗易懂的HMM例子
- Java特性-Collection和Map
- ACM-ICPC 2017 Asia Nanning
- 【转】Epoll模型
- linux如何利用命令保存文件,如何在Linux中将命令输出保存到文件?
- P1547 Out of Hay
- 昔年浅谈成都的百度推广公司靠谱吗这个问题?!
- 前端工程化-webpack-cli(官方开发中。。。)
- 基于物品的协同过滤算法实现图书推荐系统
- 是否开启谷歌Ad广告中的搜索网络合作伙伴?
- Choco安装npm
- JavaApi.Date
- python避坑_使用Python时多少有人走过的坑!避险!
- idea模块加载失败
- 无法控制SpringBoot 中的DEBUG日志
- 【Python】多线程及threading模块介绍
- 中科大郭光灿院士团队开发出量子门测试新方法
- 阿里云ECS系统盘镜像备份恢复到本地VMware
- 山东省2022 年专升本 计算机大纲(新一代信息技术)
热门文章
- VS 2010/2015 旗舰版 启动报错 Key Required
- display与transition动画冲突问题
- 前端开发常用到的flex布局简单范例
- element ui dataTimePiker日期时间选择器控制选择范围及时间转换总结
- 算法训练营 搜索技术(深度优先搜索)
- blender基础,制作台灯,花瓶,椅子,吉普车
- Linux SID 开发指南
- sudo 命令_su、sudo、sudo su、sudo -i的用法和区别
- Linux的super super super easy教程 | vim文本编辑器 1
- python日期比较大小_js中怎么比较两个日期