Python爬虫项目--爬取猫眼电影Top100榜(完整源码)!

[爬虫项目]猫眼电影TOP100 文章目录一、项目背景二、项目代码2.1 相关包的导入2.2正则表达式2.3 主函数2.4函数体2.4.1 爬取网页2.4.2 获取网页内容2.4.3 保存数据2.5 调用函数2.6 数据分析三、结果展示 一、项目背景 在学习之余需要放松身心,也需要得到有意义的提升,看电影成为大学生放松身心最主要的一种方法之一,此次项目收集了在豆瓣上排名前250的电影,对电影进行筛选,即评分从高到低。 二、项目代码 2.1 相关包的导入 对程序中用到的库进行引入 # -*- codeing = utf-8 -*-` `fr 阅读详情

本次抓取猫眼电影Top100榜所用到的知识点:

  1. python requests库

  2. 正则表达式

  3. csv模块

  4. 多进程

正文

目标站点分析

通过对目标站点的分析, 来确定网页结构, 进一步确定具体的抓取方式.

1. 浏览器打开猫眼电影首页, 点击"榜单", 点击"Top100榜", 即可看到目标页面.

  1. 浏览网页, 滚动到下方发现有分页, 切换到第2页, 发现: URL从 http://maoyan.com/board/4变换到http://maoyan.com/board/4?offset=10, 多次切换页码offset都有改变, 可以确定的是通过改变URL的offset参数来生成分页列表.

项目流程框架:

获取单页源码

#抓取猫眼电影TOP100榜
import requests
import time
from requests.exceptions import RequestException
def get_one_page():
    '''获取单页源码'''
    try:
        url = "http://maoyan.com/board/4?offset={0}".format(0)
        headers = {
            "User-Agent":"Mozilla/5.0(WindowsNT6.3;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/68.0.3440.106Safari/537.36"
        }
        res = requests.get(url, headers=headers)
        # 判断响应是否成功,若成功打印响应内容,否则返回None
        if res.status_code == 200:
            print(res.text)
        return None
    except RequestException:
        return None
def main():
    get_one_page()
if __name__ == '__main__':
    main()
    time.sleep(1)

执行即可得到网页源码, 那么下一步就是解析源码了

解析单页源码

导入正则表达式re模块, 对代码进行解析, 得到想要的信息.

import re

def parse_one_page(html):
    '''解析单页源码'''
    pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?name"><a.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime'
                         + '.*?>(.*?)</p>.*?score.*?integer">(.*?)</i>.*?>(.*?)</i>.*?</dd>',re.S)
    items = re.findall(pattern,html)
    print(items)
    #采用遍历的方式提取信息
    for item in  items:
        yield {
            'rank' :item[0],
            'title':item[1],
            'actor':item[2].strip()[3:] if len(item[2])>3 else '',  #判断是否大于3个字符
            'time' :item[3].strip()[5:] if len(item[3])>5 else '',
            'score':item[4] + item[5]
        }
def main():
    html = get_one_page()
    for item in parse_one_page(html):
        print(item)

if __name__ == '__main__':
    main()
    time.sleep(1)

提取出信息之后, 那么下一步就是保存到文件

保存到文件中

这里采用两种方式, 一种是保存到text文件, 另一种是保存到csv文件中, 根据需要选择其一即可.

  1. 保存到text文件
import json

def write_to_textfile(content):
    '''写入到text文件中'''
    with open("MovieResult.text",'a',encoding='utf-8') as f:
        #利用json.dumps()方法将字典序列化,并将ensure_ascii参数设置为False,保证结果是中文而不是Unicode码.
        f.write(json.dumps(content,ensure_ascii=False) + "\n")
        f.close()
def main():
    html = get_one_page()
    for item in parse_one_page(html):
        write_to_textfile(item)

if __name__ == '__main__':
    main()
    time.sleep(1)
  1. 保存到CSV文件

其文件以纯文本的形式存储表格数据

import csv
def write_to_csvfile(content):
    '''写入到csv文件中'''
    with open("MovieResult.csv",'a',encoding='gb18030',newline='') as f:
        # 将字段名传入列表
        fieldnames = ["rank", "title", "actor", "time", "score"]
        #将字段名传给Dictwriter来初始化一个字典写入对象
        writer = csv.DictWriter(f,fieldnames=fieldnames)
        #调用writeheader方法写入字段名
        writer.writeheader()
        writer.writerows(content)
        f.close()
def main():
    html = get_one_page()
    rows = []
    for item in parse_one_page(html):
        #write_to_textfile(item)
        rows.append(item)
    write_to_csvfile(rows)
if __name__ == '__main__':
    main()
    time.sleep(1)

单页的信息已经提取出, 接着就是提取多个页面的信息

获取多个页面

  1. 普通方法抓取
def main(offset):
    url = "http://maoyan.com/board/4?offset={0}".format(offset)
    html = get_one_page(url)
    rows = []
    for item in parse_one_page(html):
        #write_to_textfile(item)
        rows.append(item)
    write_to_csvfile(rows)
if __name__ == '__main__':
    #通过遍历写入TOP100信息
    for i in range(10):
        main(offset=i * 10)
        time.sleep(1)
  1. 多进程抓取
from multiprocessing import Pool

if __name__ == '__main__':
    # 将字段名传入列表
    fieldnames = ["rank", "title", "actor", "time", "score"]
    write_to_csvField(fieldnames)
    pool = Pool()
    #map方法会把每个元素当做函数的参数,创建一个个进程,在进程池中运行.
    pool.map(main,[i*10 for i in range(10)])

完整代码

#抓取猫眼电影TOP100榜
from multiprocessing import Pool
from requests.exceptions import RequestException
import requests
import json
import time
import csv
import re
def get_one_page(url):
    '''获取单页源码'''
    try:
        headers = {
            "User-Agent":"Mozilla/5.0(WindowsNT6.3;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/68.0.3440.106Safari/537.36"
        }
        res = requests.get(url, headers=headers)
        # 判断响应是否成功,若成功打印响应内容,否则返回None
        if res.status_code == 200:
            return res.text
        return None
    except RequestException:
        return None
def parse_one_page(html):
    '''解析单页源码'''
    pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?name"><a.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime'
                         + '.*?>(.*?)</p>.*?score.*?integer">(.*?)</i>.*?>(.*?)</i>.*?</dd>',re.S)
    items = re.findall(pattern,html)
    #采用遍历的方式提取信息
    for item in  items:
        yield {
            'rank' :item[0],
            'title':item[1],
            'actor':item[2].strip()[3:] if len(item[2])>3 else '',  #判断是否大于3个字符
            'time' :item[3].strip()[5:] if len(item[3])>5 else '',
            'score':item[4] + item[5]
        }

def write_to_textfile(content):
    '''写入text文件'''
    with open("MovieResult.text",'a',encoding='utf-8') as f:
        #利用json.dumps()方法将字典序列化,并将ensure_ascii参数设置为False,保证结果是中文而不是Unicode码.
        f.write(json.dumps(content,ensure_ascii=False) + "\n")
        f.close()

def write_to_csvField(fieldnames):
    '''写入csv文件字段'''
    with open("MovieResult.csv", 'a', encoding='gb18030', newline='') as f:
        #将字段名传给Dictwriter来初始化一个字典写入对象
        writer = csv.DictWriter(f,fieldnames=fieldnames)
        #调用writeheader方法写入字段名
        writer.writeheader()
def write_to_csvRows(content,fieldnames):
    '''写入csv文件内容'''
    with open("MovieResult.csv",'a',encoding='gb18030',newline='') as f:
        #将字段名传给Dictwriter来初始化一个字典写入对象
        writer = csv.DictWriter(f,fieldnames=fieldnames)
        #调用writeheader方法写入字段名
        #writer.writeheader()            ###这里写入字段的话会造成在抓取多个时重复.
        writer.writerows(content)
        f.close()

def main(offset):
    fieldnames = ["rank", "title", "actor", "time", "score"]
    url = "http://maoyan.com/board/4?offset={0}".format(offset)
    html = get_one_page(url)
    rows = []
    for item in parse_one_page(html):
        #write_to_textfile(item)
        rows.append(item)
    write_to_csvRows(rows,fieldnames)

if __name__ == '__main__':
    # 将字段名传入列表
    fieldnames = ["rank", "title", "actor", "time", "score"]
    write_to_csvField(fieldnames)
    # #通过遍历写入TOP100信息
    # for i in range(10):
    #     main(offset=i * 10,fieldnames=fieldnames)
    #     time.sleep(1)
    pool = Pool()
    #map方法会把每个元素当做函数的参数,创建一个个进程,在进程池中运行.
    pool.map(main,[i*10 for i in range(10)])

效果展示:

最终采用写入csv文件的方式.

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

点击领取 100%免费!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末
👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方优快云官方认证二维码或者点击链接免费领取【保证100%免费】

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/711c5966aa7348dc9340894eea54e99f.png#pic_center在这里插入图片描述

【Python爬虫】猫眼电影榜单Top100 Python爬虫大作业,本文是根据实验报告修改,内容与实验报告基本一致。【作业2020年11月20号前提交,本文于21号开放】 一、目标 爬取猫眼电影榜单Top100,将数据存入Excel文件中,并利用pyecharts库进行数据可视化得到.html文件和.png文件。 二、内容 主要包括四个阶段:爬取网页全部数据、获取数据并进行处理、数据存储、数据可视化。 1、 爬取网页全部数据 通过requests.get()获得页面数据,使用etree.HTML()将字符串数据转变成_Element对象,并存储在. 阅读详情

相关推荐

Python爬虫教程——7个爬虫小案例(附源码)_爬虫实例

爬虫的全称为网络爬虫,简称爬虫,别名有网络机器人,网络蜘蛛等等。网络爬虫是一种自动获取网页内容的程序,为搜索引擎提供了重要的数据支撑。搜索引擎通过网络爬虫技术,将互联网中丰富的网页信息保存到本地,形成镜像备份。我们熟悉的谷歌、百度本质上也可理解为一种爬虫。如果形象地理解,爬虫就如同一只机器蜘蛛,它的基本操作就是模拟人的行为去各个网站抓取数据或返回数据。

m0_74824091的博客 1万+

Python爬虫项目--爬取猫眼电影Top100榜

本次抓取猫眼电影Top100榜所用到的知识点: 1.python requests库 2.正则表达式 3.csv模块 4.多进程 正文 目标站点分析 通过对目标站点的分析,来确定网页结构,进一步确定具体的抓取方式. 1. 浏览器打开猫眼电影首页,点击"榜单", 点击"Top100榜",即可看到目标页面. 2.浏览网页, 滚动到下方发现有分页, 切...

573

用BeautifulSoup爬取猫眼榜单Top100电影

用BeautifulSoup爬取猫眼榜单Top100电影BeautifulSoup准备工作抓取分析编程代码:获取页面解析网页写入文件代码整合分页爬取完整代码: BeautifulSoup 最近再学习崔庆才的网络爬虫,之前看到用正则表达式爬取了猫眼Top100的电影,第一次爬取成功的时候还是蛮兴奋的。之后学习了BeautifulSoup,觉得可以试着用BeautifulSoup来编写爬取Top100...

小白学程序 3520

Python爬虫从入门到精通——爬虫实战:爬取猫眼电影排行Top100

本文为实战篇,需提前学习[《Python爬虫从入门到精通》基本库requests的使用和正则表达式的内容。我们需要抓取的目标为猫眼电影-榜单-TOP100榜,其地址为:[https://maoyan.com/board/4](https://maoyan.com/board/4)。我们希望爬取各个电影的排名、名称、主演、上映时间、上映地区等信息。最后保存为一张Excel表格。

冯·诺依曼 4万+

分享Python7个爬虫小案例(附源码)_爬虫实例

在这篇文章中,我们将分享7个Python爬虫的小案例,帮助大家更好地学习和了解Python爬虫的基础知识。

xiaolinyui的博客 14万+

python 爬虫抓取猫眼电影 top100 源码

python 爬虫抓取网页源码

小象.NET的专栏 5493

爬取TOP100榜猫眼电影信息 爬虫实战

写在前面 最近在学爬虫,跟着崔庆才大佬的个人网站学习。 今天跟着做了一个爬虫来爬取猫眼电影top100榜的电影信息。其中遇到了一些问题,这里就写成博客记录下来。 遇到的问题 反爬虫机制:在进行html文档获取时,收到了403的状态码,这大概率代表是由于猫眼网站的反爬虫机制。这里的解决办法是在headers中加上user-agent信息。 美团验证:在修改了headers之后,发现遇上了新的问题。...

或左的博客 3093

爬虫入门实例——使用正则表达式爬取猫眼100电影排行

中间差不多有四个月没有写博客文章了,一方面是因为那时候基本上已经开学了,虽说是上网课,但是也不想学了这忘了那,所以也不太有充足的时间来自学一些东西了,好在我有一个完整的暑假,没有工作、不需要搞社会实践,所以就能静下心来好好学一学我心心念念的爬虫了。四个月的时间又没怎么接触python了,感觉再看到他的时候有一种熟悉但陌生的感觉,对于一个学生程序员来说,四个月不再接触一个东西是很容易遗忘的,毕竟我们学的东西太多了,不可能总在你脑子里占据着,再加上没有项目啥的给你练手,所以必要的复习是非常重要的,这也就是

the best messi的博客 2688

基于Python+MongoDB猫眼电影 Top100 数据爬取与存储

​从猫眼电影排行榜页面(TOP100榜 - 猫眼电影 - 一网打尽好电影 )爬取 Top100 电影的电影名称、图片地址、主演、上映时间和评分等关键信息,并将这些信息存储到本地 MongoDB 数据库中,🔗 相关链接Xpath,可视化🔥🔥🔥

如果能帮助你,我深感荣幸 2113

废文xxxx

xxxxx

仲君Johnny的博客 5958

基于Python的网络爬虫——猫眼电影TOP100

【代码】基于Python的网络爬虫——猫眼电影TOP100。

半城之北的博客 3180

Python爬虫入门实例:Python7个爬虫小案例(附源码)!

通过本文的讲解,相信读者已经对Python爬虫有了较为全面的认识。爬虫技能在数据分析、自然语言处理等领域具有广泛的应用,希望读者能够动手实践,不断提高自己的技能水平。同时,请注意合法合规地进行爬虫,遵守相关法律法规。

m0_75067629的博客 1万+

C++学习(四六六)Multiple parse contexts are available for this file

Note: Multiple parse contexts are available for this file. Choose the preferred one from the editor menu 参考: "Multiple parse contexts" in Qt creator | Qt ForumHi Do you use sessions? https://bugreports.qt.io/browse/QTCREATORBUG-18521 Anyway, its not.

hankern的专栏 4609

Python爬虫第9节-爬取猫眼电影排行数据的简单实战

这一节,咱们要抓取猫眼电影TOP100的相关信息,会用到requests库和正则表达式。requests库用起来比urllib更方便,而且到现在我们还没系统学习过HTML解析库,所以就决定用正则表达式来做解析工具。这一节,我们通过抓取猫眼TOP100电影的信息,实际操作练习了requests库和正则表达式的使用方法。这只是一个非常基础的例子,我们借助这个例子,对怎么实现爬虫有个初步的概念,同时对这两个库的使用有更透彻的理解。但是怎么对抗反爬虫,我们后续继续跟进。

攻城狮7号的博客 2072

k-Wave仿真例程:创建超声换能器并绘制声场分布

k-Wave软件是为了模拟超声波在1D、2D或3D中的传播。应用示例包括:- 均匀和非均匀介质中的传播- 模拟各种类型的传感器- 模拟多普勒效应- 衍射、折射和反射- 光声、超声成像- 波束合成、成像重建- 模拟弹性波。

weixin_38452364的博客 6325

YOLOv13+SAHI实战:5步搞定无人机航拍小目标检测(附VisDrone数据集调参技巧)

本文详细介绍了如何结合YOLOv13与SAHI(切片辅助超推理)技术,在VisDrone2019数据集上实现高效的无人机航拍小目标检测。通过5个实战步骤,包括环境配置、SAHI参数解析、数据集调优、完整训练推理流程和性能优化技巧,帮助开发者显著提升小目标检测的准确率和效率。

egg99的博客 429

Python3简单爬虫:爬取猫眼评分top100电影

Python3:用xpath库爬取猫眼评分top100电影 在看《Python3 网络爬虫开发实战中》一书学习时,书中第三章例子用re正则匹配来爬取电影的所需数据,虽然爬取速度快,效率好,但是可能在写匹配规则时一点疏忽就会导致匹配失败提取不到所需数据,因此本次用xpath来提取内容! 本次所需了解的库: xpath库语法:http://www.w3school.com.cn/xpath/x...

song&life 2773

告别环境配置烦恼:用Conda一键搞定GATK4、samtools、fastp等生信分析全家桶

本文介绍如何利用Conda快速搭建包含GATK4、samtools、fastp等工具的生物信息学分析环境,解决软件安装和版本冲突问题。通过详细的配置步骤和实战案例,帮助研究者十分钟内完成重测序分析全家桶的环境配置,显著提升上游分析效率。

weixin_30753873的博客 334

用Python爬取猫眼电影排行榜TOP100

用Python爬取猫眼电影排行榜TOP100 参考资料《Python3网络爬虫开发实践》,作者崔庆才 这篇博客参考了崔庆才的《Python3网络爬虫开发实践》有关部分,记录了爬取猫眼电影网排名前100的电影信息的过程。 主要步骤有: 访问网站,获取页面源码 解析页面,得到想要的数据 循环爬取多个页面 把数据写入本地文件 1. 分析需要爬取的页面结构 访问猫眼电影。观察页面,会看到首页上有排名...

尧十三的博客 3062

11、硬件工程师笔试面试——IGBT(2025版本)

IGBT的应用展望与创新趋势表明,随着电子技术的不断发展,IGBT在各个领域都有广泛的应用,如高压电力系统、交通工具、电锅炉、太阳能和风能发电系统等。FS型IGBT(场终止型绝缘栅双极晶体管)在电力传输领域的应用中,通过其独特的设计和特性,有助于确保系统的稳定性和安全性。每种器件都有其独特的优势,能够满足电力传输系统中不同的技术要求。FS型IGBT通常具有正温度系数,这意味着随着温度的升高,导通压降的主要影响因素是载流子迁移率的降低以及集电极和发射极的接触电阻的增加,有助于在高温下维持稳定的性能。

XU157303764的博客 2671

硬件描述语言Verilog学习(一)

主要学习综合和仿真、模块结构和信号类型Verilog 是用代码的形式描述硬件的功能,最终在硬件电路上实现该功能。在 Verilog 描述出硬件功能后需要使用综合器对 Verilog 代码进行解释并将代码转化成实际的电路来表示,最终产生实际的电路,也被称为网表。这种将 Verilog 代码转成网表的工具就是综合器。 上图左上角是一段 Verilog 代码,该代码实现了一个加法器的功能。在经过综合器解释后该代码被转化成一个加法器电路。QUARTUS、ISE 和 VIVADO 等 FPGA 开发工具都是综合器,

安静到无声 1499
上一篇: Python入门基础教程:继承、封装、多态 (非常详细)!
下一篇: PyCharm连接MySQL数据库竟然如此简单!
Python_trys
博客等级 码龄2年 4357粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值