首页 > 编程语言 >使用Python异步抓取豆瓣电影数据并进行可视化

使用Python异步抓取豆瓣电影数据并进行可视化

时间:2024-10-13 14:46:15浏览次数:8  
标签:异步 Python 抓取 dic year import data

一 前言

在本篇文章中,我们将探讨如何使用Python的asyncioaiohttp库来异步抓取豆瓣电影Top 250中的电影数据,并将这些数据保存到CSV文件中,最后使用matplotlib库对评分趋势进行可视化。
目标网站:https://movie.douban.com/top250
在这里插入图片描述

二 环境准备

首先确保你的环境中已经安装了必要的Python库。你可以通过pip安装它们:

pip install aiohttp matplotlib

三 项目概览

我们的项目主要分为以下几个步骤:

  1. 定义一个异步函数来从豆瓣网站上抓取指定年份的电影数据。
  2. 在主函数中创建一系列异步任务,用于并发地抓取不同年份的数据。
  3. 将收集到的数据写入CSV文件。
  4. 对数据进行可视化处理,展示每年电影评分的变化趋势。

四 代码详解

4.1 异步抓取数据

我们定义了一个名为fetch_data的异步函数,它接受一个HTTP会话对象和一个年份作为参数。这个函数负责构造URL、发送请求、解析响应内容并提取所需的信息。

import re

async def fetch_data(session, year):
    url = f"https://movie.douban.com/top250?start=0&filter=&year={
     year}"
    async with session.get(url) as resp:
        page_content = await resp.text()

    # 正则表达式匹配模式
    obj = re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)'
                     r'</span>.*?<p class="">.*?<br>(?P<year>.*?)'
                     r'&nbsp;/&nbsp;(?P<country>.*?)&nbsp'
                     r';/&nbsp;(?P<plot>.*?)'
                     r'</p>.*?<span class="rating_num" property="v:average">(?P<evaluate>.*?)'
                     r'</span>.*?<span>(?P<numbers>.*?)人评价</span>', re.S)

    result = obj.finditer(page_content)
    data = []
    for it in result:
        dic = it.groupdict()
        dic['year'] = dic['year'].strip()
        dic['plot'] = dic['plot'].strip('"')
        data.append(dic)
    return data

4.2 主函数与并发执行

main函数是程序的入口点,它初始化时间记录、设置要抓取的年份范围,并创建一个ClientSession以发起网络请求。接着,为每个年份创建一个fetch_data的任务,并使用asyncio.gather并发执行所有任务。

import asyncio
import aiohttp
import csv
import time

async def main(

标签:异步,Python,抓取,dic,year,import,data
From: https://blog.csdn.net/2301_78198846/article/details/142892332

相关文章

  • python中安装sewar库
    最近模型中需要用到sewar库,但是按照传统的pipinstall包名以及condainstall包名的方法一直安装不上,出现各种错误,又不想更新pip,因此采用下载安装包安装的方法,安装包下载地址:sewar·PyPI解压安装包,并放在自己觉得合适的文件夹中,如下(我的是放在D:\python文件夹中,且也解压在......
  • Python环境安装(Windows7—现今)
    这里进行python——保姆级安装说明:首先进行安装包的下载:输入:python.org(因为是外网,所以加载速度巨慢,不用怀疑是自身网络的问题)然后显示的界面是:(我这英文进行自动翻译了,无伤大雅)然后点击:进入后,再点击进行下载:然后就开始下载了:(你会发现巨慢,外网嘛,悠哉悠哉等会)然后下载......
  • [Python学习日记-46] Python 中第三方开源模块的安装、使用与上传自己写的模块
    [Python学习日记-46]Python中第三方开源模块的安装、使用与上传自己写的模块简介下载与安装如何使用安装好的第三方开源模块如何上传自己写的模块到PyPi简介    在前面的模块介绍和导入当中主要介绍的都是Python内置的一些模块,我们把它称为标准库,而这个库......
  • Python爬虫快速入门(Requests+BeautifulSoup+Scrapy)
    目录1.为什么需要爬虫2.爬虫的方法2.1Requests2.2BeautifulSoup2.3Scrapy3.爬虫的注意事项1.为什么需要爬虫    爬虫是重要的数据获取方式,理论上任何网上公开可视的数据都是可以获取到的。在学术研究等场合中除了使用直接的数据集以及各种搜索引擎提......
  • 【Python库安装】Python环境安装GDAL库
    Python环境安装GDAL库1GDAL介绍GDAL的应用python安装GDAL库Python版本查看与切换方法1:pip直接安装另:下载.whl文件安装报错-Python安装库文件isnotasupportedwheelonthisplatform的解决方案方法2:离线安装,使用whl文件安装方法3:使用conda安装wrf-python:参考......
  • Python与深度学习库PyTorch进阶
    Python与深度学习库PyTorch进阶从零开始:PyTorch环境搭建与第一个神经网络安装PyTorch第一个神经网络玩转张量:掌握PyTorch核心——Tensor操作全解析创建张量张量运算自动求导模型构建的艺术:自定义神经网络层与模块自定义层自定义模块训练秘籍:优化器、损失函数与训练循......
  • python量化数据6:计算宁德时代macd金叉死叉红柱绿柱大小
    一、通达信公式#行业业绩轮动公众号首发DIFF:=EMA(CLOSE,12)-EMA(CLOSE,26);DEA:=EMA(DIFF,9);MACD:=2*(DIFF-DEA);金叉cross(diff,dea)死叉cross(dea,diff)二、代码#行业业绩轮动公众号首发#tdx_indicator是1个通达信常用函数的封装库,下载可以从我的开......
  • RabbitMQ 入门(一)同步通讯和异步通讯
    一、同步通讯和异步通讯微服务间通讯有同步和异步两种方式:一)、同步通讯我们之前学习的Feign调用就属于同步方式,虽然调用可以实时得到结果,但存在下面的问题:同步调用的优点:-时效性较强,可以立即得到结果同步调用的问题:-耦合度高:每次加入新的需求,都要修改原来的代码;-性能......
  • Python实践——实现视频.mp4转图片.jpg(可成功实现)
    代码......
  • Python从0到100(六十三):Python OpenCV-入门基础知识
    前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知......