网络爬虫丨基于requests+mysql爬取猫眼热门电影数据做可视化分析

这篇具有很好参考价值的文章主要介绍了网络爬虫丨基于requests+mysql爬取猫眼热门电影数据做可视化分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面

本期内容:基于requests+mysql爬取猫眼热门电影数据做可视化分析

实验需求

  • anaconda丨pycharm
  • python3.11.4
  • requests
  • mysql

项目下载地址:https://download.csdn.net/download/m0_68111267/88737727

实验描述

学习网络爬虫相关技术,熟悉爬虫基本库requests的使用;学习数据库技术,熟悉mysql数据库的基本操作。本文博主将用requests库抓取猫眼热门电影的数据,将数据保存在mysql数据库中,然后再用tkinter做可视化分析。

实验内容

1. 分析猫眼热门电影的网页信息

我们先进入要抓取数据的网页:http://maoyan.com/board/4?offset=0

然后分别进入不同页码,分析热门电影每一页的网址信息:

网络爬虫丨基于requests+mysql爬取猫眼热门电影数据做可视化分析,《 Python实战项目100例 》,爬虫,mysql,数据库
网络爬虫丨基于requests+mysql爬取猫眼热门电影数据做可视化分析,《 Python实战项目100例 》,爬虫,mysql,数据库
网络爬虫丨基于requests+mysql爬取猫眼热门电影数据做可视化分析,《 Python实战项目100例 》,爬虫,mysql,数据库

这里不难发现,其实每页的网址是有规律的,0、10、20……网址的最后每次会增加10,也就是说我们要爬取的网址应该是:

    http://films.com/board/4?offset=0
    http://films.com/board/4?offset=10
    http://films.com/board/4?offset=20
    ……
    http://films.com/board/4?offset=90

2. 创建mysql数据库

编写"db.py"文件,运行该文件可以连接到mysql数据库并创建本项目需要的电影表:

程序设计

import logging
import pymysql

logger = logging.getLogger("db_log.txt")
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
file_handler = logging.FileHandler("db_log.txt")
file_handler.setFormatter(formatter)
logger.setLevel(logging.INFO)
logger.addHandler(file_handler)


class DBHelper:
    def __init__(self, host="localhost", user="root",
                 password="123456", db="test", port=3306):
        self.host = host
        self.user = user
        self.password = password
        self.db = db
        self.port = port
        self.conn = None
        self.cur = None

    def connectDataBase(self):
        try:
            self.conn = pymysql.connect(host="localhost", user="root",
                                        password="123456", db="test", port=3306)
        except:
            logger.error("connectDataBase Error")
            return False
        self.cur = self.conn.cursor()
        return True

    def execute(self, sql, params=None):
        if not self.connectDataBase():
            return False
        try:
            if self.conn and self.cur:
                self.cur.execute(sql, params)
                self.conn.commit()
        except:
            logger.error(str(sql))
            return False
        return True

    def fetchCount(self, sql, params=None):
        if not self.connectDataBase():
            return False
        self.execute(sql, params)
        return self.cur.fetchone()

    def myClose(self):
        if self.cur:
            self.cur.close()
        if self.conn:
            self.conn.close()
        return True


if __name__ == '__main__':
    dbhelper = DBHelper()
    sql = 'create table films(title varchar(50), actor varchar(200), time varchar(100));'
    result = dbhelper.execute(sql, None)
    if result:
        print("创建成功")
    else:
        print("创建失败,详情见日志文件")
    dbhelper.myClose()
    logger.removeHandler(file_handler)

程序分析

这段代码是一个封装了数据库操作的工具类 DBHelper。具体分析如下:

  1. 该工具类使用了 logging 模块来记录日志信息。首先创建了一个 logger 对象,并设置了记录日志格式和保存日志文件的对象。然后设置日志级别为 INFO,并将 file_handler 添加到 logger 中。

  2. DBHelper 类的构造函数中,初始化了数据库的连接信息(host、user、password、db、port)和连接对象 conn、游标对象 cur。这些连接信息是硬编码的,可以根据实际情况进行修改。

  3. connectDataBase() 方法用于连接数据库。首先尝试使用 pymysql.connect() 方法连接数据库,如果连接失败,则记录错误日志并返回 False。如果连接成功,则返回 True。

  4. execute() 方法用于执行 SQL 语句。该方法首先调用 connectDataBase() 方法来确保数据库连接。然后使用游标对象的 execute() 方法执行 SQL 语句,并提交事务。如果执行过程中出现异常,则记录错误日志并返回 False。如果执行成功,则返回 True。

  5. fetchCount() 方法用于执行查询操作,并返回结果。该方法首先调用 execute() 方法执行 SQL 语句。然后使用游标对象的 fetchone() 方法获取查询结果的第一条记录。如果执行过程中出现异常,则返回 False。如果执行成功,则返回查询结果。

  6. myClose() 方法用于关闭连接和游标。该方法首先判断游标和连接是否存在,如果存在则关闭它们,并返回 True。

  7. 在主程序中,首先创建了一个 DBHelper 对象 dbhelper。然后使用 execute() 方法执行了一个创建表的 SQL 语句,并将执行结果存储在 result 变量中。根据执行结果,打印出相应的消息。最后使用 myClose() 方法关闭连接和游标,并将 file_handler 从 logger 中移除。

总的来说,这段代码封装了数据库操作的工具类 DBHelper,通过调用该类的方法,可以实现连接数据库、执行 SQL 语句、获取查询结果等操作。使用 logging 模块记录日志信息,方便调试和错误追踪。该工具类可以在其他代码中被引用,简化了数据库操作的代码编写。

运行结果

网络爬虫丨基于requests+mysql爬取猫眼热门电影数据做可视化分析,《 Python实战项目100例 》,爬虫,mysql,数据库

3. 尝试抓取热门电影的数据

编写文件"test.py",尝试抓取热门电影的信息:

程序设计

import requests
from lxml import etree
from requests_html import UserAgent

url = "https://www.maoyan.com/board/4?offset=0"
ua_headers = {
    "User-Agent": UserAgent().random
}
reponse = requests.get(url, headers=ua_headers)

tree = etree.HTML(reponse.text)
titles = tree.xpath('/html/body/div[4]/div/div/div[1]/dl/dd/div/div/div[1]/p[1]/a/text()')
actors = tree.xpath('/html/body/div[4]/div/div/div[1]/dl/dd/div/div/div[1]/p[2]/text()')
times = tree.xpath('/html/body/div[4]/div/div/div[1]/dl/dd/div/div/div[1]/p[3]/text()')

items = []
for i in range(len(titles)):
    title = titles[i].strip()
    actor = actors[i].strip()
    time = times[i].strip()
    items.append({
        'title': title,
        'actor': actor[3:],
        'time': time[5:]
    })
for i in items:
    print(i)

程序分析

这段代码是一个简单的爬虫程序,用于从猫眼电影网站上爬取电影的标题、演员和上映时间信息。

首先,导入需要的模块:requests用于发送HTTP请求,lxml用于解析HTML文档,requests_html中的UserAgent类用于生成随机的User-Agent头。然后,定义了要爬取的URL和设置了User-Agent头。使用requests.get()方法发送GET请求,将响应保存在response变量中。接下来,使用etree.HTML()方法将响应的文本内容解析为一个可用于XPath解析的HTML文档树tree

随后,使用XPath表达式定位到电影标题、演员和上映时间元素,并使用tree.xpath()方法提取出相应的文本内容,保存在titlesactorstimes变量中。接下来,使用一个循环遍历这些信息,并通过strip()方法去除首尾的空白字符。然后,将标题、演员和上映时间组合成一个字典,并添加到items列表中。最后,打印出items列表,即爬取到的电影信息。

运行结果

网络爬虫丨基于requests+mysql爬取猫眼热门电影数据做可视化分析,《 Python实战项目100例 》,爬虫,mysql,数据库

4. 抓取热门电影数据并可视化分析

编写文件"films.py",抓取猫眼热门电影的信息,将抓取到的信息先保存到前面创建的mysql数据库中,然后再从数据库中读出来做可视化分析:

程序设计

import requests
import db
from lxml import etree
from multiprocessing import Pool, Manager
import functools
import matplotlib.pyplot as plt
from requests_html import UserAgent
import logging

plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题

# 获取logger的实例
logger = logging.getLogger("films_log.txt")
# 指定logger的输出格式
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
# 文件日志,终端日志
file_handler = logging.FileHandler("films_log.txt")
file_handler.setFormatter(formatter)

# 设置默认的级别
logger.setLevel(logging.INFO)
logger.addHandler(file_handler)

……完整代码请下载后查看哦~

程序分析

该代码实现了一个爬取猫眼电影网站热门电影信息的功能。具体实现过程如下:

  1. 导入需要的库,包括requests、db、lxml、multiprocessing、functools和matplotlib.pyplot等。

  2. 设置logger,用于记录日志信息,并将日志输出到文件films_log.txt中。

  3. 编写函数get_one_page,用于发起HTTP请求,获取网页的响应结果。

  4. 编写函数write_to_sql,用于将电影信息写入数据库。

  5. 编写函数parse_one_page,用于解析网页内容,提取电影信息。

  6. 编写函数analysisCounry,用于从数据库中查询每个国家的电影数量,并绘制饼状图进行统计分析。

  7. 编写函数CrawlMovieInfo,用于抓取电影信息。该函数接收锁和偏移量作为参数,通过调用get_one_page和parse_one_page函数获取电影信息,并调用write_to_sql函数将信息写入数据库。

  8. 在主函数中,创建Manager对象和Lock对象,用于实现多进程间的共享和同步。使用functools.partial函数创建部分应用于CrawlMovieInfo函数的函数partial_CrawlMovieInfo,并创建进程池pool。

  9. 使用进程池的map方法将partial_CrawlMovieInfo函数应用于10个偏移量的列表,实现并发地抓取电影信息。

  10. 关闭进程池,等待所有进程完成。

  11. 移除文件日志处理器,调用analysisCounry函数进行数据分析和可视化。

运行结果

网络爬虫丨基于requests+mysql爬取猫眼热门电影数据做可视化分析,《 Python实战项目100例 》,爬虫,mysql,数据库
网络爬虫丨基于requests+mysql爬取猫眼热门电影数据做可视化分析,《 Python实战项目100例 》,爬虫,mysql,数据库

遇到问题

注:如遇到以下问题,完成安全验证就好喽

网络爬虫丨基于requests+mysql爬取猫眼热门电影数据做可视化分析,《 Python实战项目100例 》,爬虫,mysql,数据库
网络爬虫丨基于requests+mysql爬取猫眼热门电影数据做可视化分析,《 Python实战项目100例 》,爬虫,mysql,数据库

写在后面

我是一只有趣的兔子,感谢你的喜欢!文章来源地址https://www.toymoban.com/news/detail-787761.html

到了这里,关于网络爬虫丨基于requests+mysql爬取猫眼热门电影数据做可视化分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 爬虫项目实战:利用基于selenium框架的爬虫模板爬取豆瓣电影Top250

    👋 Hi, I’m @货又星 👀 I’m interested in … 🌱 I’m currently learning … 💞 I’m looking to collaborate on … 📫 How to reach me … README 目录(持续更新中) 各种错误处理、爬虫实战及模板、百度智能云人脸识别、计算机视觉深度学习CNN图像识别与分类、PaddlePaddle自然语言处理知识图谱、

    2024年02月04日
    浏览(49)
  • 网络爬虫丨基于scrapy+mysql爬取博客信息并保存到数据库中

    本期内容 :基于scrapy+mysql爬取博客信息并保存到数据库中 实验需求 anaconda丨pycharm python3.11.4 scrapy mysql 项目下载地址:https://download.csdn.net/download/m0_68111267/88740730 本次实验实现了:使用Scrapy框架爬取博客专栏的目录信息并保存到MySQL数据库中,实验主要涉及到Python的爬虫技术以

    2024年01月17日
    浏览(45)
  • 基于Python flask的猫眼电影票房数据分析可视化系统,可以定制可视化

    猫眼电影票房数据分析可视化系统是基于Python Flask框架开发的一款用于分析和展示猫眼电影票房数据的Web应用程序。该系统利用Flask提供了一个简单而强大的后端框架,结合Request库进行网络爬虫获取猫眼电影票房数据,并使用Pyecharts进行可视化展示,同时借助Pandas进行数据分

    2024年01月18日
    浏览(82)
  • Python爬虫案例分享【爬取豆瓣电影排行榜的电影名称和评分】

    注意:在运行此代码之前,请确保已安装 requests 和 beautifulsoup4 库

    2024年01月19日
    浏览(67)
  • 爬虫学习笔记-scrapy爬取电影天堂(双层网址嵌套)

      1.终端运行scrapy startproject movie,创建项目 2.接口查找  3.终端cd到spiders,cd scrapy_carhome/scrapy_movie/spiders,运行 scrapy genspider mv https://dy2018.com/ 4.打开mv,编写代码,爬取电影名和网址 5.用爬取的网址请求,使用meta属性传递name ,callback调用自定义的parse_second 6.导入ScrapyMovieItem,将movie对象

    2024年02月19日
    浏览(52)
  • Python爬虫实战-批量爬取豆瓣电影排行信息

    大家好,我是python222小锋老师。 近日锋哥又卷了一波Python实战课程-批量爬取豆瓣电影排行信息,主要是巩固下Python爬虫基础 视频版教程: Python爬虫实战-批量爬取豆瓣电影排行信息 视频教程_哔哩哔哩_bilibili Python爬虫实战-批量爬取豆瓣电影排行信息 视频教程作者:小锋老师

    2024年02月05日
    浏览(57)
  • python爬虫小练习——爬取豆瓣电影top250

    将爬取的数据导入到表格中,方便人为查看。 三大功能 1,下载所有网页内容。 2,处理网页中的内容提取自己想要的数据 3,导入到表格中 https://www.bilibili.com/video/BV1CY411f7yh/?p=15

    2024年01月17日
    浏览(47)
  • 爬虫练习-爬取豆瓣网电影评论用户的观影习惯数据

    以豆瓣当下实时热门电影《热烈》作为分析对象 环境: Python3(Anaconda3) PyCharm Chrome浏览器 主要模块: BeautifulSoup requests pymysql 一.概括 目标:获得电影《热烈》的用户观影习惯数据 代码概括: 1.使用requests和bs4爬取电影《热烈》所有短评长评及其用户                           

    2024年02月14日
    浏览(46)
  • 【爬虫】一次爬取某瓣top电影前250的学习记录

    先贴上爬取的脚本: import requests import re for i in range(1,11):     num=(i-1)*25     url=f\\\"https://movie.douban.com/top250?start={num}filter=\\\"     head={\\\"User-Agent\\\":\\\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\\\"}#伪造请求头     res=requests.get(url,headers=head)    

    2024年02月06日
    浏览(52)
  • python爬虫爬取电影数据并做可视化

    1、发送请求,解析html里面的数据 2、保存到csv文件 3、数据处理 4、数据可视化 需要用到的库: 注意:后续用到分词库jieba以及词频统计库nltk    解释器: python  3.10.5 编辑器:VsCode -jupyter-notebook 使用ipynb文件的扩展名 vscode会提示安装jupyter插件 效果: 注意:使用jieba分词,

    2024年02月07日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包