Python3 爬虫实战 — 猫眼电影TOP100【requests、lxml、Xpath、CSV 】


  • 爬取时间:2019-09-23
  • 爬取难度:★☆☆☆☆☆
  • 请求链接:https://maoyan.com/board/4
  • 爬取目标:猫眼电影 TOP100 的电影名称、排名、主演、上映时间、评分、封面图地址,数据保存为 CSV 文件
  • 涉及知识:请求库 requests、解析库 lxml、Xpath 语法、CSV 文件储存
  • 完整代码:https://github.com/TRHX/Python3-Spider-Practice/tree/master/BasicTraining/maoyan-top100
  • 其他爬虫实战代码合集(持续更新):https://github.com/TRHX/Python3-Spider-Practice
  • 爬虫实战专栏(持续更新):https://itrhx.blog.csdn.net/article/category/9351278

文章目录

  • 【1x00】循环爬取网页模块
  • 【2x00】解析模块
  • 【3x00】数据储存模块
  • 【4x00】完整代码
  • 【4x00】数据截图


【1x00】循环爬取网页模块

观察猫眼电影TOP100榜,请求地址为:https://maoyan.com/board/4

每页展示10条电影信息,翻页观察 url 变化:

第一页:https://maoyan.com/board/4

第二页:https://maoyan.com/board/4?offset=10

第三页:https://maoyan.com/board/4?offset=20

一共有10页,利用一个 for 循环,从 0 到 100 每隔 10 取一个值拼接到 url,实现循环爬取每一页

def index_page(number):url = 'https://maoyan.com/board/4?offset=%s' % numberresponse = requests.get(url=url, headers=headers)return response.textif __name__ == '__main__':for i in range(0, 100, 10):index = index_page(i)

【2x00】解析模块

定义一个页面解析函数 parse_page(),使用 lxml 解析库的 Xpath 方法依次提取电影排名(ranking)、电影名称(movie_name)、主演(performer)、上映时间(releasetime)、评分(score)、电影封面图 url(movie_img)

通过对主演部分的提取发现有多余的空格符和换行符,循环 performer 列表,使用 strip() 方法去除字符串头尾空格和换行符

电影评分分为整数部分和小数部分,依次提取两部分,循环遍历组成一个完整的评分

最后使用 zip() 函数,将所有提取的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表

def parse_page(content):tree = etree.HTML(content)# 电影排名ranking = tree.xpath("//dd/i/text()")# 电影名称movie_name = tree.xpath('//p[@class="name"]/a/text()')# 主演performer = tree.xpath("//p[@class='star']/text()")performer = [p.strip() for p in performer]# 上映时间releasetime = tree.xpath('//p[@class="releasetime"]/text()')# 评分score1 = tree.xpath('//p[@class="score"]/i[@class="integer"]/text()')score2 = tree.xpath('//p[@class="score"]/i[@class="fraction"]/text()')score = [score1[i] + score2[i] for i in range(min(len(score1), len(score2)))]# 电影封面图movie_img = tree.xpath('//img[@class="board-img"]/@data-src')return zip(ranking, movie_name, performer, releasetime, score, movie_img)

【3x00】数据储存模块

定义一个 save_results() 函数,将所有数据保存到 maoyan.csv 文件

def save_results(result):with open('maoyan.csv', 'a') as fp:writer = csv.writer(fp)writer.writerow(result)

【4x00】完整代码

# =============================================
# --*-- coding: utf-8 --*--
# @Time    : 2019-09-23
# @Author  : TRHX
# @Blog    : www.itrhx.com
# @CSDN    : https://blog.csdn.net/qq_36759224
# @FileName: maoyan.py
# @Software: PyCharm
# =============================================import requests
from lxml import etree
import csvheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}def index_page(number):url = 'https://maoyan.com/board/4?offset=%s' % numberresponse = requests.get(url=url, headers=headers)return response.textdef parse_page(content):tree = etree.HTML(content)# 电影排名ranking = tree.xpath("//dd/i/text()")# 电影名称movie_name = tree.xpath('//p[@class="name"]/a/text()')# 主演performer = tree.xpath("//p[@class='star']/text()")performer = [p.strip() for p in performer]# 上映时间releasetime = tree.xpath('//p[@class="releasetime"]/text()')# 评分score1 = tree.xpath('//p[@class="score"]/i[@class="integer"]/text()')score2 = tree.xpath('//p[@class="score"]/i[@class="fraction"]/text()')score = [score1[i] + score2[i] for i in range(min(len(score1), len(score2)))]# 电影封面图movie_img = tree.xpath('//img[@class="board-img"]/@data-src')return zip(ranking, movie_name, performer, releasetime, score, movie_img)def save_results(result):with open('maoyan.csv', 'a') as fp:writer = csv.writer(fp)writer.writerow(result)if __name__ == '__main__':print('开始爬取数据...')for i in range(0, 100, 10):index = index_page(i)results = parse_page(index)for i in results:save_results(i)print('数据爬取完毕!')

【4x00】数据截图

01

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sharepoint学习笔记—ECM系列--2 管理元数据服务应用Metadata Service Application

这里简单介绍一下Sharepoint2010的元数据服务应用Metadata Service Application的创建,修改和删除,在进行此类操作前,你必须是Sharepoint管理中心管理组的成员,即你有权限进入Sharepoint管理中心进行操作。 一、Metadata Service…

Python3 爬虫实战 — 豆瓣电影TOP250【requests、Xpath、正则表达式、CSV、二进制数据储存】

爬取时间:2019-09-27爬取难度:★★☆☆☆☆请求链接:https://movie.douban.com/top250 以及每部电影详情页爬取目标:爬取榜单上每一部电影详情页的数据,保存为 CSV 文件;下载所有电影海报到本地涉及知识&am…

Sharepoint学习笔记—ECM系列--3 从.CSV文件导入术语集(Term Sets)

Sharepoint2010支持直接从CSV文件导入术语集(Term Sets),也就是说你可以先直接在Excel中创建和编辑术语集,然后保存为.CSV文件,再通过Sharepoint2010管理中心提供的管理界面导入术语集到指定的Metadata Service下的指定组中,下面我们来看看如…

使用 hexo-git-backup 插件备份你的 Hexo 博客

2022-01-25 更新:博客新地址:https://www.itbob.cn/,文章距上次编辑时间较远,部分内容可能已经过时! 欢迎关注我的专栏:《个人博客搭建:HexoGithub Pages》,从搭建到美化一条龙&…

Sharepoint学习笔记—ECM系列--4 根据位置设置的默认元数据值(Location-Based Metadata Defaults)

如果有这样一个需求:客户在一个SharePoint 2010的站点的document library中创建了不同的文件夹FolderA和FolderB,对于上传到此文件夹的文件记录中有某一个列ColumnM,现在他实现当上传文件到不同的文件夹FolderA或FolderB时,列ColumnM使用不同…

Python3 爬虫实战 — 安居客武汉二手房【requests、Beautiful Soup、CSV】

爬取时间:2019-10-09爬取难度:★★☆☆☆☆请求链接:https://wuhan.anjuke.com/sale/爬取目标:爬取武汉二手房每一条售房信息,包含地理位置、价格、面积等,保存为 CSV 文件涉及知识:请求库 requ…

Sharepoint 修改密码

sharepoint安装在服务器上,比如windows 2008 R2(64), 但是在公司里面经常需要修改电脑的密码,电脑的密码一旦改变则相应的sharepoint服务器场密码也需改变,本文介绍修改sharepoint密码的简单方法,不用在命令行输入命令。 step1:打…

Python3 爬虫实战 — 虎扑论坛步行街【requests、Beautiful Soup、MongoDB】

爬取时间:2019-10-12爬取难度:★★☆☆☆☆请求链接:https://bbs.hupu.com/bxj爬取目标:爬取虎扑论坛步行街的帖子,包含主题,作者,发布时间等,数据保存到 MongoDB 数据库涉及知识&am…

Python3 爬虫实战 — 模拟登陆哔哩哔哩【滑动验证码对抗】

登陆时间:2019-10-21实现难度:★★★☆☆☆请求链接:https://passport.bilibili.com/login实现目标:模拟登陆哔哩哔哩,攻克滑动验证码涉及知识:滑动验证码的攻克、自动化测试工具 Selenium 的使用完整代码&…

Python3 爬虫实战 — 模拟登陆12306【点触验证码对抗】

登陆时间:2019-10-21实现难度:★★★☆☆☆请求链接:https://kyfw.12306.cn/otn/resources/login.html实现目标:模拟登陆中国铁路12306,攻克点触验证码涉及知识:点触验证码的攻克、自动化测试工具 Selenium…

SharePoint无代码工作流设计开发实例——交通费报销流程(一)

开发环境: (1)SharePoint Designer 2010 (2)SharePoint Online(Office 365) 关于Office 365和SharePoint Online的相关信息请参见以下链接 http://blog.csdn.net/miragesky2049/article/details/7242982 1、需求分析 组织结构: 用户类型&#xff1a…

Python3 爬虫实战 — 58同城武汉出租房【加密字体对抗】

爬取时间:2019-10-21爬取难度:★★★☆☆☆请求链接:https://wh.58.com/chuzu/爬取目标:58同城武汉出租房的所有信息涉及知识:网站加密字体的攻克、请求库 requests、解析库 Beautiful Soup、数据库 MySQL 的操作完整代…

SharePoint无代码工作流设计开发实例——交通费报销流程(二)

3、InfoPath表单的设计及发布 (1)数据源和页面设计 域(元素)和域(属性)如下: 白色为域(元素),该类型的字段,发布时,提升成字段后,列表库的数据是…

SharePoint无代码工作流设计开发实例——交通费报销流程(三)

4、SharePoint Designer无代码工作流的设计 开发工具为SharePoint Designer 2010 新建“列表工作流”,绑定“交通费报销单”表单库 设置工作流启动选项“创建项目时自动启动工作流” 编辑工作流 (关于以下工作流详细设计可参考http://blog.csdn.net/mi…

SharePoint学习札记[2] — MOSS2007体系结构概述

熟悉微软Office产品线的人都知道,MOSS 2007的上一个版本SPS 2003的全称是 Office Sharepoint Portal Server,在新版本中,微软去掉了Portal一个词。从这个角度很清楚地看到微软对MOSS 2007的定位,是的,MOSS 已经不再仅仅…

SharePoint学习札记[3] — Office SharePoint Server 2007部署

MOSS的第一步就是部署啦!《0ffice SharePoint Server 2007部署图示指南》图文并茂的展示了OSS2007的部署过程。虽然并不难,但对MOSS还摸不清方向的人来说是个不错的指导。手册的作者没有署名,也查不到出自谁手,在这里对他的劳动成果表示感谢…

SharePoint学习札记[4] — 创建SharePoint站点

为减少创建SharePoint站点过程中的麻烦,先打开IIS管理器,将“默认站点”停止或删除。后面的创建过程中,创建向导会自动创建端口为80的网站。 现在将: 1. 创建两个Web应用程序。 2. 创建共享服务。 3. 创建…

【Python CheckiO 题解】Sun Angle

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…

Python CheckiO 题解系列 丨 博客目录索引

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本题解系列主要记录自己在用 Python 闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 …

文带你深入了解 Redis 内存模型

前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分。 我们使用Redis时,会接触Redis的5种对象类型(字符串、哈希、列表、集合、有序集合…