利用Python爬取豆瓣电影

数据采集——爬虫篇(一):豆瓣电影TOP250详细信息采集 数据采集——爬虫篇(一):豆瓣电影TOP250详细信息采集 . 1.分析豆瓣url换页变化 打开 https://movie.douban.com/top250?start=0&filter= 来到豆瓣主页 此处可以观察到电影是在第1个序号开始的,暂时记住url,观察后续变化 切换第二页,发现url变化: https://movie.douban.com/top250?start=25&filter= 第二页如下: **url第一页:https://movie.douban.com/to 阅读详情

原文地址:https://www.cnblogs.com/fangtaoa/p/8366528.html

目标:使用Python爬取豆瓣电影并保存MongoDB数据库中


我们先来看一下通过浏览器的方式来筛选某些特定的电影:
在这里插入图片描述

我们把URL来复制出来分析分析:
https://movie.douban.com/tag/#/?sort=T&range=0,10&tags=%E7%94%B5%E5%BD%B1,%E7%88%B1%E6%83%85,%E7%BE%8E%E5%9B%BD,%E9%BB%91%E5%B8%AE
有3个字段是非常重要的:
  1. sort=T

  2. range=0,10

  3. tags=%E7%94%B5%E5%BD%B1,%E7%88%B1%E6%83%85,%E7%BE%8E%E5%9B%BD,%E9%BB%91%E5%B8%AE


具体分析方法如下:


1. sort:表示排序方式,可以看到它有3中排序方式

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

根据上图可以直到每个字母表示的含义:

T:热度排序,
R:时间排序,
S:评价排序。

2. range=0,10;表示一个范围,具体是什么范围呢?

在这里插入图片描述
range参数我们也搞定了,它就是表示评分区间!
默认评分区间是:0-10

3. tags:同样的原理,这是一个标签

我们选中的标签有:电影,爱情,美国,黑帮4个标签,但是在tags里面我们看到的不是这写汉字,而是被编码过的形式!

%E7%94%B5%E5%BD%B1,%E7%88%B1%E6%83%85,%E7%BE%8E%E5%9B%BD,%E9%BB%91%E5%B8%AE

那如何知道这些字符是表示什么呢?

我们可以到网上进行解码看看正不正确?    在这里插入图片描述

4. 那么还有没有可以选择的参数呢?

我们还有2个参数可以选择!

playbale=1 表示可播放

unwatched=1 表示还没看过的
在这里插入图片描述

至此,我们就已经把URL中的查询参数全都弄明白了!



但是,又有一个问题了,当我们在浏览器中点击"加载更多"按钮时,这个地址栏中的URL并没有发生变化,但是电影信息可以加载出来了!这是为什么?

如果知道AJAX加载技术的读者可能知道这个原理,实际上就是异步加载,服务器不需要刷新整个网页,只需要刷新局部网页就可以把数据展示到网页中,这样不仅可以加快速度,也可以减少服务器的压力.


重点来了:

抓包结果:在这里插入图片描述

看看浏览器地址栏的URL与Request URL有什么不一样的地方?

我们在浏览器地址栏中看到的URL是:
https://movie.douban.com/tag/#/?sort=S&range=5,10&tags=%E7%94%B5%E5%BD%B1,%E7%88%B1%E6%83%85,%E7%BE%8E%E5%9B%BD&playable=1&unwatched=1


实际浏览器发送的Request URL是:
https://movie.douban.com/j/new_search_subjects?sort=S&range=5,10&tags=%E7%94%B5%E5%BD%B1,%E7%88%B1%E6%83%85,%E7%BE%8E%E5%9B%BD&playable=1&unwatched=1&start=0

除了被红色标记的地方不同之外,其他地方都是一样的!那我们发送请求的时候应该是用哪一个URL呢?

在上面我就已提到了,在豆瓣电影中,是采用异步加载的方式来加载数据的,也就是说在加载数据的过程中,地址栏中的URL是一直保持不变的,那我们还能用这个URL来发送请求吗?当然不能了!
  

既然不能用地址栏中的URL来发送请求,那我们就来分析一下浏览器实际发送的Request URL:
我们把这个URL复制到浏览器中看看会发生什么情况!

在这里插入图片描述

我们可以看到这个URL的响应结果恰恰就是我们想要的数据!

采用json格式.在Python中,我们可以利用一些工具把它转换成字典格式,来提取我们想要的数据.


距离我们成功还有一小步:

在这个URL中,我们看到还有一个参数:start,这个是干嘛的呢?

这个数值表示偏移量,来控制每一次加载的偏移位置是在哪里!比如我们把它设置成20,表示一次请求的电影数量.那么得到的结果如下:
在这里插入图片描述

到这里,该案例的思路,难点就已经全都捋清楚了,剩下的就是代码的事情了!

项目结构:

在这里插入图片描述
  

完整的代码如下:
settings.py
User_Agents =[
    'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
    'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
    'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1',
    'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11',
    'Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
]

mongoHelper.py
import pymongo


class MongoDBHelper:
    """数据库操作"""

    def __init__(self, collection_name=None):
        # 启动mongo
        self._client = pymongo.MongoClient('localhost', 27017)
        # 使用test数据库
        self._test = self._client['test']
        # 创建指定的集合
        self._name = self._test[collection_name]

    def insert_item(self, item):
        """插入数据"""
        self._name.insert_one(item)

    def find_item(self):
        """查询数据"""
        data = self._name.find()
        return data


def main():
    mongo = MongoDBHelper('collection')
    mongo.insert_item({'a': 1})


if __name__ == '__main__':
    main()

douban.py
import logging
import random
import string
import requests
import time
from collections import deque
from urllib import parse

from settings import User_Agents
from MongDBHelper import MongoDBHelper


class DoubanSpider(object):
    """豆瓣爬虫"""
    def __init__(self):
        # 基本的URL
        self.base_url = 'https://movie.douban.com/j/new_search_subjects?'
        self.full_url = self.base_url + '{query_params}'
        # 从User-Agents中选择一个User-Agent
        self.headers = {'User-Agent': random.choice(User_Agents)}
        # 影视形式(电影, 电视剧,综艺)
        self.form_tag = None  # 类型
        self.type_tag = None  # 地区
        self.countries_tag = None  # 特色
        self.genres_tag = None
        self.sort = 'T'  # 排序方式,默认是T,表示热度
        self.range = 0, 10  # 评分范围
        self.playable = ''
        self.unwatched = ''
        # 连接数据库,集合名为douban_movies
        self.db = MongoDBHelper('douban_movies')

    def get_query_parameter(self):
        """获取用户输入信息"""
        # 获取tags参数
        self.form_tag = input('请输入你想看的影视形式(电影|电视剧|综艺...):')
        self.type_tag = input('请输入你想看的影视类型(剧情|爱情|喜剧|科幻...):')
        self.countries_tag = input('请输入你想看的影视地区(大陆|美国|香港...):')
        self.genres_tag = input('请输入你想看的影视特色(经典|冷门佳片|黑帮...):')

    def get_default_query_parameter(self):
        """获取默认的查询参数"""
        # 获取 sort, range, playable, unwatched参数
        self.range = input('请输入评分范围[0-10]:')
        self.sort = input('请输入排序顺序(热度:T, 时间:R, 评价:S),三选一:').upper()
        self.playable = input('请选择是否可播放(默认不可播放):')
        self.unwatched = input('请选择是否为我没看过(默认是没看过):')

    def encode_query_data(self):
        """对输入信息进行编码处理"""
        if not (self.form_tag and self.type_tag and self.countries_tag and self.genres_tag):
            all_tags = ''
        else:
            all_tags = [self.form_tag, self.type_tag, self.countries_tag, self.genres_tag]
        query_param = {
            'sort': self.sort,
            'range': self.range,
            'tags': all_tags,
            'playable': self.playable,
            'unwatched': self.unwatched,
        }

        # string.printable:表示ASCII字符就不用编码了
        query_params = parse.urlencode(query_param, safe=string.printable)
        # 去除查询参数中无效的字符
        invalid_chars = ['(', ')', '[', ']', '+', '\'']
        for char in invalid_chars:
            if char in query_params:
                query_params = query_params.replace(char, '')
        # 把查询参数和base_url组合起来形成完整的url
        self.full_url = self.full_url.format(query_params=query_params) + '&start={start}'

    def download_movies(self, offset):
        """下载电影信息
        :param offset: 控制一次请求的影视数量
        :return resp:请求得到的响应体"""
        full_url = self.full_url.format(start=offset)
        resp = None
        try:
            resp = requests.get(full_url, headers=self.headers)
        except Exception as e:
            # print(resp)
            logging.error(e)
        return resp

    def get_movies(self, resp):
        """获取电影信息
        :param resp: 响应体
        :return movies:爬取到的电影信息"""
        if resp:
            if resp.status_code == 200:
                # 获取响应文件中的电影数据
                movies = dict(resp.json()).get('data')
                if movies:
                    # 获取到电影了,
                    print(movies)
                    return movies
                else:
                    # 响应结果中没有电影了!
                    # print('已超出范围!')
                    return None
        else:
            # 没有获取到电影信息
            return None

    def save_movies(self, movies, id):
        """把请求到的电影保存到数据库中
        :param movies:提取到的电影信息
        :param id: 记录每部电影
        """
        if not movies:
            print('save_movies() error: movies为None!!!')
            return

        all_movies = self.find_movies()
        if len(all_movies) == 0:
            # 数据库中还没有数据,
            for movie in movies:
                id += 1
                movie['_id'] = id
                self.db.insert_item(movie)
        else:
            # 保存已经存在数据库中的电影标题
            titles = []
            for existed_movie in all_movies:
                # 获取数据库中的电影标题
                titles.append(existed_movie.get('title'))

            for movie in movies:
                # 判断数据库中是否已经存在该电影了
                if movie.get('title') not in titles:
                    id += 1
                    movie['_id'] = id
                    # 如果不存在,那就进行插入操作
                    self.db.insert_item(movie)
                else:
                    print('save_movies():该电影"{}"已经在数据库了!!!'.format(movie.get('title')))

    def find_movies(self):
        """查询数据库中所有的电影数目
        :return: 返回数据库中所有的电影
        """
        all_movies = deque()
        data = self.db.find_item()
        for item in data:
            all_movies.append(item)
        return all_movies


def main():
    """豆瓣电影爬虫程序入口"""
    # 1. 初始化工作,设置请求头等
    spider = DoubanSpider()
    # 2. 与用户交互,获取用户输入的信息
    spider.get_query_parameter()
    ret = input('是否需要设置排序方式,评分范围...(Y/N):')
    if ret.lower() == 'y':
        spider.get_default_query_parameter()
    # 3. 对信息进行编码处理,组合成有效的URL
    spider.encode_query_data()
    id = offset = 0
    while True:
        # 4. 下载影视信息
        reps = spider.download_movies(offset)
        # 5.提取下载的信息
        movies = spider.get_movies(reps)
        # 6. 保存数据到MongoDB数据库
        # spider.save_movies(movies, id)
        offset += 20
        id = offset
        # 控制访问速速
        time.sleep(5)


if __name__ == '__main__':
    main()

小结: 在本次案例中,主要的难点有:查询参数的组合那部分和了解异步加载的原理从而找到真正的URL!查询参数的设置主要用到urlencode()方法,当我们不要把ASCII字符编码的时候,我们要设置safe参数为string.printable,这样只要把一些非ASCII字符编码就好了,同样quote()也是用来编码的,也有safe参数;那么本例中为什么要使用urlencode()方法呢?主要是通过观察URL是key=value的形式,所以才选用它!当我们把数据插入到数据库中时,如果是有相同的名字的电影,我们就不插入,这样也是处于对性能的考虑,合理利用资源!
python爬虫教程: Python利用Scrapy框架爬取豆瓣电影示例 本文实例讲述了Python利用Scrapy框架爬取豆瓣电影。分享给大家供大家参考,具体如下: 1、概念 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。 通过Python包管理工具可以很便捷地对scrapy进行安装,如果在安装中报错提示缺少依赖的包,那就通过pip安装所缺的包 pip install scrapy... 阅读详情

相关推荐

利用定向网络爬虫爬取豆瓣电影top250【Python】

最近在外地实习,闲来无事学了一下requests库和BeautifulSoup,掌握基本用法之后试着爬取了一下豆瓣电影top250,中间也参考了不少其他大佬的博客,所以最后写出来的代码也都大同小异吧,就当聊以自慰了。 简介 利用requests库和bs4中的BeautifulSoup,实现对豆瓣电影top250的爬取,最后将电影信息写入一个文本文件中。 代码如下 ''' @Author ...

每天都要学Python的博客 2838

Scrapy爬取多级分页加代理+Requests爬取豆瓣新片top10并存储MongoDB

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 爬取页面:https://movie.douban.com/chart 爬虫逻辑解析: 一级:获取豆瓣新片榜top10电影基本信息 yield->二级 二级:获取电影的描述信息 yield->三级 ...

一花一世界 一叶一菩提 1148

利用Python爬取豆瓣电影短评进行评分趋势分析

本文介绍了基于Python的豆瓣电影短评数据爬取与分析方法。通过解析豆瓣页面结构,设计反爬策略,使用requests和BeautifulSoup实现数据采集。采集的数据经过时间标准化、缺失值处理等清洗步骤后,进行时间序列分析和可视化展示。文章还探讨了评分趋势建模、文本情感挖掘等技术,并分析了反爬限制、数据量等实际挑战。该方法为影视行业提供了有效的用户口碑分析工具,可辅助电影营销与市场研究。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1050

python爬取豆瓣电视剧页面

1 前期准备 1 获取爬取页面的URL地址 打开谷歌浏览器,打开手机版豆瓣电视剧,在分类中找到美剧豆瓣美剧,打开开发者模式。 为了找到页面响应真正的url地址,我们需要在Network这里查找。可以看到Network下面有很多条目,这里对于里面的css、js和图片等文件,我们可以不用管。从上往下查找,找到如图所示的item开头的一行。 为了确定我们找到的这个条目是我们所需要的,我们可以根据网页...

weixin_46088216的博客 1697

Python—爬虫之爬取豆瓣经典电影并利用openpyxl模块将数据存为excel

回顾csv模块写入 & 读取数据 学习openpyxl模块写入 & 读取数据 爬取豆瓣电影的经典电影

猫看见偶像说 1954

Apk脱壳圣战之---脱掉“梆梆加固”的保护壳

一、前言 现如今Android用户的安全意识不是很强,又有一些恶意开发者利用应用的名字吸引眼球,包装一个恶意锁机收费的应用,在用户被骗的安装应用之后,立马手机锁机,需要付费方可解锁。这样的恶意软件是非常让人痛恨的。所以本文就用一个案例来分析如何破解这类应用,获取解锁密码,让被骗的用户可以找回爽快! 二、分析软件锁机原理 本文用的是一款叫做:安卓性能激活.apk,关于样本apk文件后面会...

尼古拉斯.赵四的博客 5060

利用urllib库与re库抓取电影数据网站

本系列可能是一个比较长的系列,主要是对《Python3网络爬虫开发实战》前七章的一个内容总结并且熟悉使用一下相关的框架与技术。

PorterZhang的博客 750

图解说明JLink驱动与目标板电源匹配的关键细节

深入讲解JLink驱动安装及使用过程中,如何正确匹配目标板电源,避免常见通信故障。通过图解方式清晰展示关键连接细节,确保调试稳定可靠,是嵌入式开发中不可或缺的实战经验分享。

weixin_42173218的博客 431

如何使用爬虫爬取豆瓣网的电影信息

第一步:进入豆瓣电影网站,右键打开检查,点击Network,查看url第二步:寻找请求头:User-Agent第三步:找规律,点击第一页,和第二页会发现start的间隔为20,url的start参数也从0变成20第四部:敲代码import json import urllib.request import urllib.parse #请求头 headers = { "User-Agen...

lenovoa68e的博客 4593

扩增子分析|基于零模型的群落确定性和随机性构建过程——R实战

周集中教授团队多年在群落确定性和随机性过程深耕,于2017年总结出来下述图表中的计算路径,广受生态领域研究者的推崇。本文基于该计算路径,梳理了整理了邓晔老师组的代码,通过一个实例演示了计算过程和结果。

weixin_46814750的博客 4668

保姆级教程:在LKD3588开发板上为RK3588添加SC2210摄像头驱动(含完整DTS配置)

本文提供了一份详细的教程,指导如何在LKD3588开发板上为RK3588处理器添加SC2210摄像头驱动,包括完整的DTS配置和内核编译步骤。教程涵盖了环境准备、驱动文件添加、DTS配置详解、内核编译与烧录、驱动测试以及常见问题排查,帮助开发者快速实现SC2210传感器在RK3588平台上的集成与优化。

weixin_42641741的博客 479

python爬取豆瓣电影250_利用Python爬取豆瓣TOP250的电影

由于最近一直在学习爬虫,之前写了一篇爬取图标的文章,其中用到了urllib模块。这里我们将不再使用urllib模块。这里使用requests模块和BeautifulSoup4模块爬取内容为:豆瓣评分前二百五位电影的名字、主演、以及该电影的简介。首先先进入豆瓣电影Top250,打开审查元素,找到所要爬取的电影名、主演以及电影主页的链接都在标签中间,如下图所示下面是代码及注释#导入模块import r...

weixin_39616961的博客 484

C语言获取硬件信息(CPU序列号,硬盘序列号,网卡IP、MAC地址、是否插入网线)

本文主要介绍Linux和Windows下使用C语言获取各种硬件信息,包括CPU序列号、硬盘序列号、网卡信息(包括网卡名字、IP地址、MAC地址、网卡是否插入网线等)。

叶落花枯的博客 9378

如何利用python爬取豆瓣250排行电影

爬取过程如下 1.获取网页URL 2.利用requests提取网页 3.解析网页数据,并利用正则表达式提取网页相关数据,并保存到datalist中 4.保存数据到excel中 用到的第三方包如下:用的是bs4+requests,用requests+xpath估计更快 import requests #用于获取网页数据 from bs4 import BeautifulSoup #用于解析网页数据 import xlwt #用于对excel表进行操作 from requests import e

qq_38220144的博客 2318

AUTOSAR进阶图解==>AUTOSAR_EXP_CDDDesignAndIntegrationGuideline

本文档提供了AUTOSAR架构中复杂驱动(CDD)的设计与集成指南。CDD作为非标准化的软件实体,位于复杂驱动层,实现传感器评估、执行器控制、微控制器访问等特殊功能。文档详细阐述了CDD的架构特点、设计建议(包括文档要求、文件结构、接口描述等)以及与其他模块(RTE、库、标准BSW等)的集成方式。特别强调了CDD在多核系统和MCAL层中的实现考量,为开发人员提供了从文档规范到代码实现的全方位指导,确保CDD在保持AUTOSAR兼容性的同时满足特殊功能需求。

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 1886

Golang内存管理:GC调优实战案例

在Golang编程中,内存管理是一个非常重要的方面。良好的内存管理可以提高程序的性能和稳定性,而GC(垃圾回收)调优则是优化内存管理的关键手段。本文的目的就是通过实际案例,深入讲解Golang中GC调优的方法和技巧,让读者能够在实际项目中更好地进行内存管理和性能优化。范围涵盖了从核心概念的解释到具体代码实现和调优过程的详细分析。本文首先会介绍一些相关的术语和核心概念,让读者对Golang内存管理和GC有一个基本的认识。然后通过故事引入的方式,更加形象地解释核心概念及其相互关系。

AI Agent Harness Engineering 1118

python用scrapy爬虫豆瓣_Python利用Scrapy框架爬取豆瓣电影示例

本文实例讲述了Python利用Scrapy框架爬取豆瓣电影。分享给大家供大家参考,具体如下:1、概念Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。通过Python包管理工具可以很便捷地对scrapy进行安装,如果在安装中报错提示缺少依赖的包,那就通过pip安装所缺的包pip install scrapyscra...

weixin_39745013的博客 1521

华为OD机考双机位C卷 - 风险投资计划(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 风险投资计划(OD上机考试双机位C卷)。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 546

利用python爬虫爬取豆瓣电影Top250

Python:利用爬虫爬取豆瓣电影Top250 import urllib from bs4 import BeautifulSoup import re import openpyxl def get_url(url): headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleW...

weixin_42533386的博客 669

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【python爬虫案例】利用python爬取豆瓣电影TOP250评分排行数据!

【python爬虫案例】利用python爬取豆瓣电影TOP250评分排行数据,并导出为excel文档

王哪跑的博客 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

利用 Python 爬取豆瓣电影数据+数据可视化

今天通过 Python 的库爬取豆瓣电影 Top 250 的数据,包括电影名称、描述、评分和评价人数等信息。通过这个项目,大家会学会如何使用爬虫技术来获取和分析网页数据。到这里,我们的爬虫基本上已经完成核心功能。从发送请求到解析网页,再到数据存储,每一步都有每一步的重点和技术要点。对于复杂网页结构,提取数据时可以灵活使用soup.find或等方法。在处理描述、评分等数据时需要加以注意,有些字段可能不存在。

GLB_0627的博客 1660

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

利用python 爬取豆瓣即将上映的电影

仅学习交流 Upcoming.py import re import requests from doubanapi import findmovie from bs4 import BeautifulSoup url = "https://movie.douban.com/cinema/later/taian/" headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, lik

god_hastur的博客 599

python学习-利用xpath爬取豆瓣top250电影保存至本地excel

库 requests库 lxml csv

bimbamboun的博客 2196
上一篇: 小程序简称功能上线解析
下一篇: Python实现QQ游戏连连看外挂秒杀
盛国强
博客等级 码龄11年 105粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值