首页 > Python资料 博客日记

数据采集与数据预处理(python)概述(一)

2024-10-12 22:00:06Python资料围观52

本篇文章分享数据采集与数据预处理(python)概述(一),对你有帮助的话记得收藏一下,看Python资料网收获更多编程知识

一,数据采集的概念

        在处理海量事务时,我们经常需要针对特定条件进行数据的精准获取,这一过程被称为数据采集。数据采集的核心在于从多样化的数据存储形式中,根据具体需求进行有针对性的数据提取。这些数据存储形式丰富多样,涵盖了从简单的文本文档到复杂的数据库系统,再到多媒体文件等多个领域。

常见的数据存储方式包括:

  • 文件系统(File System)

    • 文本文档:TXT, DOC, PDF, XLS(Excel), CSV等。
    • 二进制文件:图片(JPG, PNG, GIF等),音频(MP3, WAV等),视频(MP4, AVI等)。
  • 关系型数据库(Relational Database Management System, RDBMS)

    • MySQL
    • Oracle
    • SQL Server
    • PostgreSQL
    • DB2
    • SQLite

    这些数据库使用表格(table)、行(row)和列(column)来组织数据,并通过SQL(结构化查询语言)进行数据操作。

  • 非关系型数据库(NoSQL)

    • 键值存储(Key-Value Stores):Redis, Memcached
    • 文档数据库(Document Databases):MongoDB, CouchDB
    • 列式数据库(Column-Oriented Databases):Cassandra, HBase
    • 图数据库(Graph Databases):Neo4j, Dgraph
    • 面向对象的数据库(Object-Oriented Databases):ObjectDB, db4o

    非关系型数据库不依赖传统的表格结构,而是使用键值对、文档、列或图等结构来存储数据。

  • 内存数据库(In-Memory Databases)

    • 这些数据库将数据存储在RAM中,以提供极快的访问速度。例如,SAP HANA, VoltDB。
  • 分布式文件系统(Distributed File Systems)

    • Hadoop Distributed File System (HDFS):常用于大数据处理场景。
    • GlusterFS
    • Ceph
  • 对象存储(Object Storage)

    • Amazon S3
    • Google Cloud Storage
    • Alibaba Cloud OSS
    • MinIO

    对象存储将数据作为对象进行存储,每个对象都包含数据、元数据(描述数据的属性)和唯一的标识符。

  • 块存储(Block Storage)

    • 传统的硬盘驱动器(HDD)和固态硬盘(SSD)
    • SAN(存储区域网络)和NAS(网络附加存储)
  • 云存储服务

    • 各大云服务提供商(如Amazon, Google, Microsoft, Alibaba)提供的云存储解决方案。
  • 图形数据库(Graph Databases)

    • 除了上面提到的Neo4j和Dgraph,还有其他如OrientDB, TigerGraph等。
  • 时间序列数据库(Time-Series Databases)

    • 用于存储时间序列数据的数据库,如InfluxDB, Prometheus, TimescaleDB等

数据采集不仅仅局限于上述提到的存储方式,它也可以通过网络爬虫等技术从互联网中抓取数据。网络爬虫是一种特定的数据采集技术,专门用于从互联网上自动收集信息。接下来,我们将重点关注网络中的数据获取技术,特别是网络爬虫的应用与实现。

二,网络爬虫的概念

网络爬虫(又称为网页蜘蛛、网络机器人、网页追逐者等)是一种自动化程序,它模拟人类在网页上的行为,通过发送HTTP请求获取网页内容,并解析网页内容以提取所需信息。以下是关于网络爬虫的详细介绍:

1. 定义与背景

  • 定义:网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。
  • 产生背景:随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。网络爬虫的出现解决了这一问题,帮助人们从互联网上快速、高效地获取大量数据。

2. 工作原理

  • 发送HTTP请求:网络爬虫使用HTTP协议与服务器进行通信,通过发送GET或POST等请求方法获取网页内容。
  • 解析网页:爬虫程序会解析网页内容,提取出需要的元素(如标签、属性、文本等)。对于HTML页面,可以使用解析库(如BeautifulSoup、Jsoup)进行解析;对于其他类型的数据(如JSON、XML),则使用相应的解析方法。
  • 存储数据:爬虫程序会将抓取到的数据进行处理和清洗,然后存储到数据库、文件或其他存储介质中,以备后续使用。常见的存储方式包括关系型数据库(如MySQL、PostgreSQL)、NoSQL数据库(如MongoDB、Redis)和文件(如CSV、JSON)。

3. 关键技术

  • 链接跟踪:在抓取过程中,爬虫程序会遇到页面中的链接。为了获取更多相关的数据,爬虫程序会跟踪这些链接,递归地进行抓取。通常使用广度优先搜索或深度优先搜索算法来管理抓取队列和遍历链接。
  • 反爬措施应对:为了防止被过度访问和保护数据安全,一些网站可能会采取反爬措施。为了应对这些措施,爬虫程序可能需要处理验证码、模拟用户行为、使用代理IP等技术手段。

4. 应用场景

  • 搜索引擎:搜索引擎是网络爬虫最重要的应用场景之一。例如,谷歌、百度、必应等搜索引擎都利用网络爬虫技术从互联网上采集海量的数据。
  • 舆情分析与监测:政府或企业通过网络爬虫技术自动采集论坛评论、在线博客、新闻媒体或微博等网站中的海量数据,进行舆情热点发掘和跟踪。
  • 聚合平台:如返利网、慢慢买等聚合平台,运用网络爬虫技术采集电商平台上的商品信息,为用户提供价格比较和优惠信息。
  • 出行类软件:如飞猪、携程、去哪儿等出行类应用,使用网络爬虫技术访问交通出行的官方售票网站,以获取余票信息并通知用户。

5. 注意事项

  • 合法合规:在使用网络爬虫时,必须遵守相关法律法规,尊重网站的robots.txt协议,不得采集涉及个人隐私或商业机密的信息。
  • 尊重网站权益:高频率地访问网站可能导致服务器压力增大,甚至瘫痪。因此,在使用网络爬虫时,应合理控制访问频率,避免对网站造成不必要的负担。

三,网络爬虫的分类

1. 按爬取范围划分

  • 宽搜索爬虫:这是搜索引擎的核心,用于抓取互联网上的所有内容,以构建搜索索引数据。它们会尽可能地覆盖整个互联网,以提供广泛的搜索结果。
  • 深搜索爬虫:它是指爬取特定网站的全部链接,可以深入网站中的所有内容。这种爬虫通常用于对特定网站进行深度分析和数据挖掘。
  • 聚焦爬虫:它针对特定的网站或网页,专门爬取某个网站的特定内容。例如,聚焦爬虫可以用于抓取某家商家的产品信息、价格等。

2. 按爬取层次划分

  • 表层爬虫:这种爬虫主要爬取表面的内容,如新闻标题、概要等。它们通常用于快速获取网页的概览信息。
  • 深层爬虫:深层爬虫会抓取深层页面的内容,如新闻正文、用户评论等。这种爬虫能够提供更加详细和全面的信息。
  • 综合爬虫:综合爬虫结合了表层爬虫和深层爬虫的特点,能够同时获取网页的概览信息和详细内容。

3. 按爬取频率划分

  • 实时爬虫:实时爬虫会定时访问某个网站,如果发现网页内容发生变化,就立即进行抓取。这种爬虫通常用于实时监测新闻、社交媒体等动态内容。
  • 定时爬虫:定时爬虫按一定的时间间隔爬取网页的内容,如每小时、每天或每周爬取一次。这种爬虫适用于需要定期获取数据的情况。
  • 触发爬虫:触发爬虫在特定的条件下触发进行网页抓取操作,例如在某个页面上访问某次后继续保持跟踪访问等。

4. 按系统结构和实现技术划分

  • 通用网络爬虫:这种爬虫一般用于搜索引擎,如Google、Bing等。其特点是速度快、覆盖面广,但可能会给某些网站带来不必要的访问负荷。
  • 聚焦网络爬虫:也叫主题网络爬虫,它针对特定主题或需求进行爬取,如针对某个行业的新闻网站进行爬取。这种爬虫能够节省大量的服务器资源和带宽资源。
  • 增量式网络爬虫:增量式网络爬虫只爬取最新更新的网页或内容发生变化的网页,避免重复爬取已经存在的网页。这种爬虫能够高效地更新数据。
  • 深层网络爬虫:深层网络爬虫能够抓取深层页面的内容,如需要提交表单或登录后才能访问的页面。这种爬虫需要处理复杂的页面逻辑和验证机制。

5. 其他分类方式

  • 分布式爬虫:这种爬虫可以将任务分配给不同的爬虫程序进行处理,从而加快爬取速度和提高效率。分布式爬虫具有可扩展性强、效率高等特点。
  • 批量型网络爬虫:这种爬虫限制抓取的属性,包括抓取范围、特定目标、限制抓取时间、限制数据量以及限制抓取页面等。
  • 垂直网络聚焦爬虫:可以理解为无限细化的增量网络爬虫,可以细致地对诸如行业、内容、发布时间、页面大小等很多因素进行筛选。

四,robots协议

Robots协议(也被称为爬虫协议、网络蜘蛛协议或网络爬虫排除标准),全称为“Robots Exclusion Protocol”,是网站与搜索引擎爬虫之间的一种协议机制。其核心目的是告诉搜索引擎爬虫哪些页面可以被抓取,哪些页面不能被抓取,以保护网站的隐私和安全。以下是对Robots协议的详细介绍:

1. 协议定义与背景

  • 定义:Robots协议是一种指导网络爬虫(或称为网络蜘蛛、机器人)访问和抓取网页的协议。
  • 背景:随着搜索引擎技术的发展,网络爬虫成为搜索引擎获取网页内容的主要手段。然而,有些网站出于安全和隐私的考虑,不希望所有内容都被搜索引擎收录。Robots协议应运而生,为网站和搜索引擎之间提供了一种平衡机制。

2. 协议作用

  • 保护网站隐私:通过指令告知搜索引擎爬虫哪些页面可以被抓取,哪些页面应该排除在搜索结果之外。
  • 节省服务器带宽:可以屏蔽一些网站中比较大的文件,如图片、音乐、视频等,以减轻服务器压力。
  • 方便搜索引擎抓取:可以设置网站地图连接,方便引导蜘蛛爬取页面。

3. 协议实现方式

  • 网站管理员可以在网站域名的根目录下放一个名为robots.txt的文本文件。这个文件使用任何常见的文本编辑器都可以创建和编辑。
  • robots.txt文件中可以指定不同的网络爬虫能访问的页面和禁止访问的页面,指定的页面由正则表达式表示。
  • 例如,文件中的一条指令“Disallow: /admin/”表示禁止爬虫访问网站根目录下名为“admin”的目录及其子目录。

4. 注意事项

  • 非强制执行力:虽然Robots协议为网站和搜索引擎之间提供了一种平衡机制,但它并不是一个防火墙,也没有强制执行力。搜索引擎完全可以忽视robots.txt文件去抓取网页的快照。
  • 并非法律意义上的协议:Robots协议是一个君子协定,供业内人士自觉遵守,并不具备法律上的“协议”效力。

5. 违反Robots协议的风险

  • 如果爬虫程序违反了Robots协议,可能会面临法律风险,如不正当竞争、非法获取计算机信息系统数据罪等。
  • 此外,违反Robots协议还可能损害网站及用户的隐私数据,引发安全隐忧。

6. 总结

        Robots协议是网站出于安全和隐私考虑而设置的一种机制,用于指导搜索引擎爬虫访问和抓取网页。它通过robots.txt文件告诉爬虫哪些页面可以被抓取,哪些页面不能被抓取。然而,Robots协议并不具备强制执行力,搜索引擎可以选择遵守或忽视该协议。因此,网站管理员在设置Robots协议时,应充分考虑其实际效果和潜在风险。

五,编写网络爬虫的流程

  1. 确定爬取目标
    • 在开始编写爬虫之前,需要明确爬取的目标,即要获取哪些数据以及数据的来源。
    • 可以是特定网站的某个页面、整个网站的所有页面、特定关键词的搜索结果等。
  2. 发送HTTP请求获取网页内容
    • 爬虫需要通过发送HTTP请求来获取目标网页的内容。
    • 常见的请求方法有GET和POST。GET请求用于获取数据,而POST请求则用于提交数据。
    • 在Python中,可以使用requestsurllib等库来发送HTTP请求,并获取网页的响应。
  3. 解析网页内容
    • 获取到网页的响应后,需要对网页内容进行解析,提取需要的信息。
    • 常用的网页解析库有BeautifulSouplxml等。
    • 通过标签选择器、正则表达式等方法,可以定位和提取感兴趣的内容。
  4. 数据处理和存储
    • 在提取到需要的数据后,可以进行一些必要的数据处理,如数据清洗、格式转换等。
    • 可以使用Python中的数据处理库,如pandasnumpy等进行处理。
    • 最后将数据保存到本地文件(如CSV、JSON等)或数据库中,以备后续使用。
  5. 反爬虫策略应对
    • 为了限制爬虫对网站的访问,防止恶意爬取和数据滥用,网站会采取一些反爬虫策略。
    • 常见的反爬虫策略包括设置验证码、限制访问频率、检测爬虫的User-Agent等。
    • 为了顺利完成爬虫任务,需要应对这些反爬虫策略,可以使用代理IP、设置随机请求头等方法绕过检测。
  6. 优化和扩展
    • 在爬虫编写完成后,可以根据实际需求进行优化和扩展。
    • 例如,可以使用多线程或异步IO来提高爬虫的抓取效率。
    • 还可以设置定时任务,让爬虫自动定时执行,以定期获取网页数据。
  7. 测试和调试
    • 在编写和修改爬虫的过程中,需要不断进行测试和调试。
    • 可以使用打印语句、日志记录等方式来查看爬虫的运行情况和错误信息。
    • 根据测试结果,对爬虫进行相应的修改和优化。
  8. 遵守法律法规和道德准则
    • 在编写和使用爬虫时,需要遵守相关的法律法规和道德准则。
    • 不得非法获取、存储、使用他人的个人信息或商业机密。
    • 在爬取数据时,应尊重网站的版权和隐私政策。

六,静态网页与动态网页

1、静态网页

  1. 定义:静态网页是指没有后台数据库、不含程序代码、不与服务器发生数据交互的网页。它的内容在发布到网页服务器上后,无论是否有用户访问,都保持不变。
  2. 特点:
    • 每个网页都有一个固定的URL,且URL通常以.htm、.html、.shtml等文件格式存储。
    • 内容相对稳定,容易被搜索引擎检索。
    • 交互性较差,功能限制较大。
    • 更新和维护相对困难,需要手动修改网页文件。
  3. 适用场景:适用于内容更新较少、功能需求简单的展示型网站。

2、动态网页

  1. 定义:动态网页是与静态网页相对的一种网页编程技术。它的内容可以随时间、环境或数据库操作的结果而发生改变。动态网页实际上是服务器上的程序,在用户请求时返回生成的网页内容。
  2. 特点:
    • 以数据库技术为基础,可以大大降低网站维护的工作量。
    • 可以实现更多功能,如用户注册、登录、在线调查、用户管理、订单管理等。
    • 网页URL的后缀通常以.aspx、.asp、.jsp、.php、.perl、.cgi等形式存在,并且在URL中可能包含“?”。
    • 交互性强,用户体验好。
  3. 技术实现:动态网页结合了HTML以外的高级程序设计语言和数据库技术。常用的编程语言有Java、VB、VC等,而数据库技术则包括MySQL、Oracle等。
  4. 适用场景:适用于内容更新频繁、功能需求复杂的网站,如电子商务网站、社交网络等。

七,HTTP的OSI七层网络模型

  1. 物理层(Physical Layer)
    • 负责传输比特流,包括电缆、光纤等传输介质和物理接口。
    • 功能:编码和解码比特流,定义传输速率、传输距离等物理特性。
  2. 数据链路层(Data Link Layer)
    • 负责将比特流组装为帧,并进行可靠的传输。
    • 功能:帧的封装与解封装,差错检测和纠正,流量控制。
  3. 网络层(Network Layer)
    • 负责实现不同网络之间的数据传输和路由选择。
    • 功能:IP地址管理,路由选择,数据分组与转发。
  4. 传输层(Transport Layer)
    • 负责实现可靠的数据传输和连接管理。
    • 功能:建立端到端的逻辑连接,数据分段与重组,流量控制和拥塞控制。
    • 与HTTP相关的传输层协议主要是TCP(传输控制协议)。
  5. 会话层(Session Layer)
    • 负责建立、管理和终止会话。
    • 功能:同步不同设备上的应用程序之间的对话,控制会话的持续时间。
  6. 表示层(Presentation Layer)
    • 负责数据的格式转换和加密解密等功能。
    • 功能:数据压缩和解压缩,数据加密和解密,数据格式转换。
  7. 应用层(Application Layer)
    • 提供用户与网络的接口,负责处理特定应用的数据。
    • 功能:提供网络服务和资源,如HTTP、FTP、SMTP等协议。
    • HTTP协议位于应用层,它定义了如何包装数据、如何发送请求和接收响应等规则。

八,urllib模块在python网络爬虫的常用函数

        在Python中,urllib模块是用于处理URL和HTTP请求的基础库之一。然而,自Python 3起,推荐使用urllib.requesturllib.errorurllib.parse等子模块来替代以前单一的urllib模块。以下是urllib模块(特别是urllib.request)在Python网络爬虫中常用的函数和方法:

  1. urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

    • 主要用于打开一个URL并返回一个http.client.HTTPResponse对象,该对象可以像文件对象那样被读取。
    • url:要打开的URL。
    • data:如果提供,则将其发送为POST请求的主体。
    • timeout:设置超时时间(秒)。
  2. Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

    • 创建一个urllib.request.Request对象,该对象可以包含额外的请求头、请求方法等。
    • 通常与urlopen一起使用,以发送具有自定义请求头和方法的HTTP请求。
  3. install_opener(opener)

    • 安装一个全局的URL打开器。这通常用于自定义请求的处理方式,例如通过代理、SSL证书验证等。
  4. build_opener([handler, ...])

    • 创建一个OpenerDirector对象,该对象可以处理URL请求。可以使用各种处理器(如代理处理器、HTTP重定向处理器等)来定制OpenerDirector。
  5. urlretrieve(url, filename=None, reporthook=None, data=None)

    • 从指定的URL下载数据,并将其保存到本地文件。
    • url:要下载的URL。
    • filename:保存文件的路径和名称。如果未提供,则使用URL中的文件名。
    • reporthook:一个回调函数,用于报告下载进度。
    • data:如果提供,则将其发送为POST请求的主体。
  6. urlcleanup()

    • 清除缓存的URL打开器。这通常不需要在常规代码中使用,但在某些情况下(如测试)可能很有用。
  7. quote(string, safe='/', encoding=None, errors=None)

    • 将字符串转换为URL安全的格式。这通常用于将字符串作为URL的一部分(如查询参数)时。
  8. unquote(string, encoding='utf-8', errors='replace')

    • 对URL编码的字符串进行解码。

        请注意,虽然urllib模块提供了基本的URL处理功能,但对于更复杂的网络爬虫任务,如并发请求、会话保持、Cookie处理等,可能需要使用更高级的库,如requests

九,用户代理

用户代理(User Agent,简称UA)是一个由浏览器或其他客户端发送给服务器的HTTP头部字段,用于标识发起请求的客户端类型。以下是关于用户代理的详细介绍:

1. 定义与用途

  • 定义:用户代理是一个特殊字符串头,它允许服务器识别客户使用的操作系统及版本、CPU类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等信息。
  • 用途
    1. 允许服务器根据用户代理提供针对特定浏览器或操作系统优化的内容。
    2. 帮助网站分析用户使用的设备、操作系统和浏览器类型,以更好地了解受众。

2. 组成与格式

  • 组成:用户代理字符串通常包括浏览器标识、操作系统标识、加密等级标识、浏览器语言、渲染引擎标识和版本信息等。
  • 格式:浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息。

3. 示例

  • 一个Chrome浏览器在macOS操作系统上的典型用户代理字符串可能是:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
    • 浏览器:Chrome(版本号91.0.4472.124)
    • 操作系统:macOS(版本10.15.7)
    • 渲染引擎:AppleWebKit(版本537.36)

4. 重要性

  • 用户体验:通过用户代理,服务器可以发送与客户端设备、操作系统和浏览器兼容的内容,提高用户体验。
  • 安全性:一些服务器可能会根据用户代理阻止或限制来自某些浏览器或操作系统的请求,以增强安全性。

5. 伪装与限制

  • 伪装用户代理:某些情况下,用户或开发者可能会选择伪装用户代理以绕过某些限制或获取特定内容。然而,这可能会违反某些网站的服务条款。
  • 限制与滥用:用户代理字符串也可能被用于不合理的目的,如跟踪用户或展示不同的内容给不同的用户代理。因此,在使用或处理用户代理信息时,应遵守相关法律法规和道德准则。

6. 服务器请求中的用户代理

  • 不仅是浏览器发起的请求中存在用户代理,服务器在发起请求时也可以设置用户代理。例如,当使用命令行工具如curl或wget发起请求时,它们会自动设置用户代理头。

通过了解用户代理的定义、组成、用途和重要性,可以更好地理解它在网络请求中的作用,并在开发或测试过程中根据需要设置或分析用户代理信息。

十,用户代理池

用户代理池(User Agent Pool)是一个用于存储、管理和分配用户代理(User Agent)字符串的系统或工具。以下是对用户代理池的详细介绍:

1. 定义与用途

  • 定义:用户代理池是一个集合,其中包含多个不同的用户代理字符串。这些字符串用于标识和模拟不同的浏览器、操作系统或其他客户端设备。
  • 用途
    1. 绕过限制:某些网站或服务可能会根据用户代理来限制或阻止某些类型的客户端访问。使用用户代理池可以绕过这些限制,提高访问的灵活性和成功率。
    2. 数据采集:在网络爬虫和自动化脚本中,使用用户代理池可以模拟来自不同设备和浏览器的请求,从而避免被目标网站识别并阻止。
    3. 广告推广:广告商可能会使用用户代理池来模拟不同用户的访问行为,以便更准确地测试和优化广告效果。

2. 工作原理

  • 存储:用户代理池存储多个不同的用户代理字符串,这些字符串可以手动添加或从公共数据库导入。
  • 选择:当需要发起网络请求时,系统会从用户代理池中随机选择一个用户代理字符串,并将其添加到请求的HTTP头部中。
  • 请求:使用所选的用户代理字符串发起网络请求,目标服务器将看到该用户代理并据此响应。

3. 优点与考虑因素

  • 优点
    1. 提高访问灵活性和成功率。
    2. 避免被目标网站识别并阻止。
    3. 模拟不同设备和浏览器的访问行为,以获取更准确的测试结果。
  • 考虑因素
    1. 用户代理数量与质量:用户代理池中的用户代理数量应足够多,以覆盖不同的设备和浏览器类型。同时,用户代理字符串的质量也很重要,应确保它们能够准确模拟目标设备的访问行为。
    2. 更新与维护:由于浏览器和设备不断更新换代,用户代理字符串也需要定期更新和维护。这可以通过从公共数据库导入新的用户代理字符串或手动添加来实现。
    3. 合法性与道德性:在使用用户代理池时,应遵守相关法律法规和道德准则。不得滥用用户代理池来从事非法或不道德的活动,如恶意攻击、数据窃取等。

4. 与代理IP池的区别

  • 用户代理池和代理IP池是两个不同的概念。用户代理池主要用于模拟不同的设备和浏览器访问行为,而代理IP池则提供多个不同的IP地址来隐藏或替换用户的真实IP地址。在某些情况下,这两个工具可能会结合使用以提高访问的灵活性和安全性。

5. 实际应用场景

  • 网络爬虫:在网络爬虫中,使用用户代理池可以模拟来自不同设备和浏览器的请求,避免被目标网站识别并阻止。这有助于提高数据采集的效率和稳定性。
  • 广告推广:广告商可以使用用户代理池来模拟不同用户的访问行为,以更准确地测试和优化广告效果。这有助于提高广告投放的效率和准确性。

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

标签:

相关文章

本站推荐