python爬虫阶段性总结和项目实操——爬取猫眼票房Top100

article/2025/11/10 21:37:56

本博客通过爬取猫眼票房Top100来简要复习一下网页的HTML获取(requests库)解析(Beautiful Soup库)和数据保存(csv库)以及总结一下爬取过程中遇到的问题和解决方法

运行结果如下

在这里插入图片描述
在这里插入图片描述

1.获取网页源代码

def get_one_page(url):headers={'User-Agent':'your_UA','Cookie':'your_cookie'}try:response=requests.get(url,headers=headers)response.raise_for_status()  response.encoding=html.apparent_encodingreturn response.textexcept:return "产生异常"

获取网页HTML用的是requests库的get方法
获取网页最简单的方法就是:

response=requests.get(url)

get方法返回的是Response对象这是一个非常重要的对象有以下重要的属性:

属性说明
r.status_codeHTTP请求返回状态,200成功,404失败
r.textHTTP响应内容的字符串形式
r.encoding从HTTP header中猜测出的响应内容编码方式
r.apparent_encoding从内容中分析出的响应内容编码方式(备选编码)
r.contentHTTP响应内容的二进制形式

一般网站都有反爬虫措施,可以识别出这是爬虫从而返回一些奇奇怪怪的东西而这些字符串并不是我们想要的网页源代码,因此我们要在请求中添加请求头来伪装浏览器,请求头通过get方法的headers参数引入

response= requests.get(url,headers=headers)

headers参数接受一个字典,其中可以包括Cookie,User-Agent等信息
get方法还可以接受timeout参数来限定请求的时间(超过时间抛出异常)

爬取网页并不是每次都一定能成功的,因此异常处理十分重要,可以通过try-except语句来捕获异常

Response对象的raise_for_status 方法是专门与异常打交道的方法如果返回的状态码不是200,将产生异常requests.HTTPError
apparent_encoding是从响应内容中分析出的编码方式,一般比encoding更加可靠所以用apparent_encoding来替换encoding

以上是爬取网页的通用代码框架

2.解析HTML文档提取相关信息并保存

第一步成功返回了网页源代码接下来要做的就是解析提取信息并保存到本地,这一步用到的是bs4库中的BeautifulSoup对象和csv库

def parse_one_html(html):soup=BeautifulSoup(html,'lxml')names=soup.find_all('p',attrs={'class':"name"})name_list=[]for item in names:name_list.append(item.string)times=soup.find_all('p',attrs={'class':'releasetime'})time_list=[]for item in times:time_list.append(item.string.strip())starts=soup.find_all('p',attrs={'class':'star'})start_list=[]for item in starts:start_list.append(item.string.strip())with open('top100.csv','a',encoding='utf-8') as f:writer=csv.writer(f)for name,time,start in zip(name_list,time_list,start_list):writer.writerow([name,time,start])

解析提取

要提取信息首先就要初始化一个BeautifulSoup对象

soup=BeautifulSoup(html,‘lxml’)

该对象的第一个参数是带解析的HTML字符串,第二个参数是解析器的类型
对于不标准的HTML字符串初始化的时候BeautifulSoup可以自动更正
BeautifulSoup有prettify() 方法可以解析字符串以标准格式输出
直接调用节点名称就可以选择节点元素( bs4.element.Tag类型
这样子选择只能选择满足条件的第一个节点,要想获取全部节点可以使用find_all() 方法

list=BeautifulSoup.find_all(name,attrs,**kwargs)

name:要查找节点的名称;attrs:节点的属性值,是一个字典
这个方法返回的是一个列表,列表中的每个元素都是满足要求的节点元素
( bs4.element.Tag类型)访问列表就可以得到每个元素的内容
因为返回的是bs4.element.Tag类型所以还可以继续调用节点名称进行嵌套查找

对于bs4.element.Tag类型有以下操作

1.获取名称

可以使用name属性来获取节点名称,例如:

print(soup.title.name)
#运行结果 title

2.获取属性

每个节点可能有多个属性,选择这个节点后可以调用attrs获取所有属性

print(soup.p.attrs)
print(soup.p.attrs['name'])

attrs的返回结果是字典形式

3.获取内容

可以利用string属性获取节点元素包含的文本内容,比如要获取第一个p节点的文本内容:

print(soup.p.string)

保存文件

 with open('top100.csv','a',encoding='utf-8') as f:writer=csv.writer(f)for name,time,start in zip(name_list,time_list,start_list):writer.writerow([name,time,start])

with as可以简化写法,在with控制块结束时文件会自动关闭,所以就不需要再调用close()方法
首先,打开top100.csv文件,然后指定打开模式为’a’(即追加),获得文件句柄,随后调用csv库的writer()方法初始化写入对象,传入该句柄,然后调用writerow()方法传入每行的数据即可完成写入

补充:关于zip()函数

zip函数的原型为:zip([iterable, …])

参数iterable为可迭代的对象,并且可以有多个参数。该函数返回一个以元组为元素的列表,其中第 i 个元组包含每个参数序列的第 i 个元素。返回的列表长度被截断为最短的参数序列的长度。只有一个序列参数时,它返回一个1元组的列表。没有参数时,它返回一个空的列表。

完整代码

import time
from lxml import etree
import requests
from bs4 import BeautifulSoup
import csvdef get_one_page(url):headers={'User-Agent':'your_UA','Cookie':'your_Cookie'}html=requests.get(url,headers=headers)try :html.raise_for_status()html.encoding=html.apparent_encodingreturn html.textexcept:return Nonedef parse_one_html(html):soup=BeautifulSoup(html,'lxml')names=soup.find_all('p',attrs={'class':"name"})name_list=[]for item in names:name_list.append(item.string)times=soup.find_all('p',attrs={'class':'releasetime'})time_list=[]for item in times:time_list.append(item.string.strip()[5:])starts=soup.find_all('p',attrs={'class':'star'})start_list=[]for item in starts:start_list.append(item.string.strip()[3:])with open('top100.csv','a',encoding='utf-8') as f:writer=csv.writer(f)for name,time,start in zip(name_list,time_list,start_list):writer.writerow([name,time,start])if __name__=='__main__':offset=10with open('top100.csv','w',encoding='utf-8') as f:writer=csv.writer(f)writer.writerow(['片名','时间','主演'])for i in range(10):url='https://maoyan.com/board/4?requestCode=b19e676ce53b36a2ad23f2e2c48c7e39ynijn&offset='+str(i*offset)html=get_one_page(url)parse_one_html(html)time.sleep(1)

http://chatgpt.dhexx.cn/article/WSHkYj6j.shtml

相关文章

猫眼产品分析

一、前言 本文试图通过对猫眼电影的版本迭代历程分析、用户分析、功能分析、运营分析以及数据表现来回答以下几个问题: (1)猫眼电影的产品定位? (2)猫眼电影产品设计及运营中有哪些亮点和策略&#xff1f…

详解用爬虫批量抓取猫眼电影票房数据

"大数据"是一个体量特别大,数据类别特别大的数据集,并且这样的数据集无法用传统数据库工具对其内容进行抓取、管理和处理。 "大数据"首先是指数据体量(volumes)大,指代大型数据集,一般在10TB规模左右&#xf…

基于Python的电影票房爬取与可视化系统的设计与实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

猫眼 — 破解数字反爬获取实时票房

From:https://zhuanlan.zhihu.com/p/33112359 js分析 猫_眼_电_影 字体文件 font-face:https://www.cnblogs.com/my8100/p/js_maoyandianying.html 解析某电影和某招聘网站的web-font自定义字体:https://www.jianshu.com/p/5400bbc8b634 Font…

猫眼电影票房爬取到MySQL中_爬取猫眼电影top100,request、beautifulsoup运用

这是第三篇爬虫实战,运用request请求,beautifulsoup解析,mysql储存。 如果你正在学习爬虫,本文是比较好的选择,建议在学习的时候打开猫眼电影top100进行标签的选择,具体分析步骤就省略啦,具体的…

python 抢票代码 猫眼演出_Python爬虫-猫眼电影排行

爬虫的目标 爬取猫眼电影TOP100的电影名称,时间,评分,图片等信息 抓取分析 查看网页源代码,找到对应的目标信息,发现一部电影对应的源代码是一个dd节点 抓取首页 为了方便,这里先抓取第一页的内容,运行之后,可以查看到网页的源代码,之后需要对页面进行解析。 import re…

flask+猫眼电影票房预测和电影推荐

flask猫眼电影票房预测和电影推荐,此系统有详细的录屏,下面只是部分截图,需要看完整录屏联系博主 系统开发语言python,框架为flask,数据库mysql,分为爬虫和可视化分析

猫眼电影产品分析

一、前言 本文试图通过对猫眼电影的版本迭代历程分析、用户分析、功能分析、运营分析以及数据表现来回答以下几个问题: (1)猫眼电影的产品定位? (2)猫眼电影产品设计及运营中有哪些亮点和策略? …

超过53亿!《长津湖》为什么这么火爆?我用 Python 来分析猫眼影评

对于这个十一黄金周的电影市场,绝对是《长津湖》的天下,目前票房就已经突破53亿,大有奋起直追《战狼2》的尽头。而且口碑也是相当的高,猫眼评分高达9.5,绝对的票房口碑双丰收啊 下面我们就通过爬取猫眼的电影评论&am…

python使用pyecharts对猫眼电影票房精美可视化分析简单仪表盘??(五个图好多个组件!!)

本次带来的是象形柱状图,玫瑰饼图,柱状图,折线图,漏斗图,并在一个网页上显示。排版也不好,其实我就是翻译下文档给大家讲解一下! 我又来了!上次做了个猫眼电影的不过瘾,又…

python爬猫眼电影影评,Python系列爬虫之爬取并简单分析猫眼电影影评

前言 今天给大家介绍利用Python爬取并简单分析猫眼电影影评。让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: requests模块; pyecharts模块; jieba模块; scipy模块; wordcloud模块; …

爬取猫眼电影,进行分析

目录 简介环境要求数据爬取爬取目标电影详情页反爬虫破解数据存储服务器搭建电影推荐 数据展示电影推荐电影评分电影票房电影类型词云 简介 这次是一次数据库实验,实验要求是了解最新的数据库,并使用!做一个简单案例使用。根据实际需要就采用…

Python—猫眼电影票房爬虫实战 轻松弄懂字体反爬!

目标 1.爬取猫眼票房信息 2.将信息保存起来(MySQL、Redis、MongoDB或者Excel等等),我们保存的是Excel 爬取网址 https://piaofang.maoyan.com/?vernormal&isid_key2d9aacd2f26d4d0dba63 分析 1.打开chrome,输入网址我们看到的效果如下 2.我们…

基于Python猫眼票房TOP100电影数据抓取

基于Python猫眼票房TOP100电影数据抓取 使用requests库抓取数据BeatifulSoup解析URL,将数据存入csv文件处理数据,生成图表 本次爬取数据使用Python语言在jupyter notebook上爬取的,并使用数据生成了一些图表。 使用requests库抓取数据 本段…

基于猫眼票房数据的可视化分析

案例背景:由于最近《哪吒之魔童降世》的火爆,最新票房已经超过49亿,使我对国内票房的整体走势有了很大兴趣,究竟49亿的票房数据,在国内是处于一个什么水平?除了票房数据,又有哪些特征因素可以用…

ardruino控制继电器_Arduino 各种模块篇-继电器

现在按照既定想法,把所有的arduino模块依次尝试一边。 链接到我的arduino Uno 与arduino mega 2560 上 mega 2560有更多的io口,而且cache也很大。所以应该更有效果。幸好可以有arduino IDE 现在比较稳定的版本官方提供的是1.0.3的。 而我用的是ubuntu库里…

【继电器模块教程基于Arduino】

继电器模块教程基于Arduino 前言介绍继电器模块继电器引出线示例:使用继电器模块和 PIR 运动传感器控制灯![在这里插入图片描述](https://img-blog.csdnimg.cn/760e865a1e6b49d4a8f3e9fe1a0a6f74.png)前言 本文介绍如何使用继电器模块通过 Arduino 控制电源电压。我们对继电器…

8路USB继电器模块 windows Linux使用

模块采用USB及串口与外界通信,方便模块与PC机、单片机连接。模块正常的工作电压为5V,并为ICSE014A(8路继电器)模块配置5V电源接口。具体参数见下表: ICSE012A ICSE013A ICSE014A 单位 备注 CC 4 2 8 模块路数 I 400 250 700 …

ardruino控制继电器_arduino控制继电器

一、arduino控制继电器 典型的继电器结构原理图如下: 继电器有一个输入回路,一般接低压电源,有一个输出回路,一般接高压电源。 输入回路中有一个电磁铁线圈,当输入回路有电流通过,电磁铁产生磁力,吸力使输出回路的触点接通,则输出回路导电(通)。 当输入回路无电流通过,…

Arduino笔记实验(初级阶段)—继电器模块

Arduino笔记实验(初级阶段)—继电器模块 文章目录 Arduino笔记实验(初级阶段)—继电器模块前言一、电路图二、继电器模块实验代码实验效果展示 三、继电器模块实验总结 前言 自学笔记,没有历史知识铺垫(省略百度部分),博主基于C代码编程,函数…