python爬虫之获取携程网所有航班机票信息,与携程网共同变化的爬虫博客

2023-05-16

我们看一下效果

 

我实现的功能是

1、爬虫热门城市之间航班信息的查询

2、 存储到mysql数据库中;

当然你也可以爬取所有城市之间的航班信息,我会提供完整的city代码给你;只是我需要实现的是自动功能;


我们要学会怎么爬虫,而不是复制代码,然后改不出来就一直停滞那里,然后骂别人写的垃圾;

我们先看一下携程网的信息


 

从以上我们可以获取两个信息

1、我是从上海到成都的

2、7条航班信息

教你如何爬虫
 我不教静态网页的爬虫,因为太简单了;我们直接上手携程网

我们到这个上述这个页面以后,我推荐用谷歌浏览器,方便;

1、谷歌浏览器

2、携程网显示机票信息页面

3、f12

4、然后我们刷新页面,network下就有很多的文件了

选择XHR,然后出现以下几条信息

点击其中一条,然后点击右侧的preview

 

我们可以看到里面有数据,不一定是第一条,我们查看里面的数据有没有我们要的信息

举个例子,其中的pageData,我们点击,然后发现previewer里面的数据很少,根本没有一条是我们需要的;所以肯定不是pageData这个文件

 其实是第一条product

 现在已经有眉目了,我们需要这个product文件的信息,点击Headers

从上面我们可以知道我们爬虫的地址是url = 'http://flights.ctrip.com/itinerary/api/12808/products'

这个请求是post请求;那么我们需要发送什么样的数据才会有这样的结果呢?

 

 废话不多说,直接贴上代码


记住,不要频繁的爬取,会被网站设置填写校验码才能搜素的;然后你就会爬不出来任何东西;

如果你已经这样了,那么要么换一个无线网,要么换一个电脑,他们的Ip不一样就可以了;

我的表结构是这样的

因为我后续会对这个表进行处理,所以用了Django框架的表生成

from django.db import models
# Create your models here.
class airport(models.Model):
    id = models.AutoField(primary_key=True)   #是否设置为主键
    fcity = models.CharField(max_length=32)#开始城市
    tcity = models.CharField(max_length=32)#目的城市
    date = models.CharField(max_length=32)#日期
    airlineName = models.CharField(max_length=32)#航空公司
    flightNumber = models.CharField(max_length=32)#航空公司编码
    airportName = models.CharField(max_length=32)#机场名称
    departureDate = models.CharField(max_length=32)#出发时间
    arrivalDate = models.CharField(max_length=32)#结束时间
    punctualityRate = models.CharField(max_length=32)#优惠率
    jprice = models.CharField(max_length=32)  #经济舱价格
    fprice = models.CharField(max_length=32)  # 公务舱价格

    def __str__(self):
        return "<airport:{fcity=%s,tcity=%s,date=%s,airlineName=%,flightNumber=%,airportName=%,departureDate=%,arrivalDate=%,punctualityRate=%,jprice=%,fprice=%}>"\
               %(self.id,self.fcity,self.tcity,self.date,self.airlineName,self.flightNumber,self.airportName,self.departureDate,self.arrivalDate,self.punctualityRate,self.jprice,self.fprice)
from prettytable import PrettyTable
import requests
import json
import pymysql
import time
from operator import itemgetter
class FLIGHT(object):
  def __init__(self):
      self.url = 'http://flights.ctrip.com/itinerary/api/12808/products'
      self.headers={
        "User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0",
        "Content-Type": "application/json",  # 声明文本类型为 json 格式
        "referer": r"https://flights.ctrip.com/itinerary/oneway/SHA-TAO?date=2020-04-11"
    }
      self. city = {"BJS": "北京","SHA": "上海", "CAN": "广州","SZX": "深圳",
                     "CTU": "成都","HGH": "杭州", "WUH": "武汉","SIA": "西安","CKG": "重庆",
                     "TAO": "青岛","CSX": "长沙","NKG": "南京","XMN": "厦门","KMG": "昆明",
                     "DLC": "大连","TSN": "天津","CGO": "郑州","SYX": "三亚","TNA": "济南",
                     "FOC": "福州"
                     }




  def insert(self,value):
    db = pymysql.connect("localhost", "root", "123456", "python")
    cursor = db.cursor()
    sql = "INSERT INTO airport_airport(fcity,tcity,date,airlineName,flightNumber,airportName,departureDate,arrivalDate,punctualityRate,jprice,fprice) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
    try:
        cursor.execute(sql, value)
        db.commit()
        print('插入数据成功')
    except:
        db.rollback()
        print("插入数据失败")
    db.close()

  def xiecheng(self,date):
      ##循环遍历
      for fromcode, fromcity in sorted(self.city.items(), key=itemgetter(0)):
          for tocode, tocity in sorted(self.city.items(), key=itemgetter(0)):
              if fromcode != tocode:
                  request_payload = {"flightWay": "Oneway",
                                     "classType": "ALL",
                                     "hasChild": 'false',
                                     "hasBaby": 'false',
                                     "searchIndex": 1,
                                     "airportParams": [
                                         {"dcity":fromcode, "acity":tocode,
                                          "dcityname":fromcity ,"acityname":tocity ,
                                          "date": date}]};
                  time.sleep(20)
                  print(fromcode,fromcity,tocode,tocity,date)
                  self.findall(request_payload,fromcity,tocity,date)



  def findall(self,request_payload,fromcity,tocity,date):
    # 这里传进去的参数必须为 json 格式
    response = requests.post(self.url, data=json.dumps(request_payload), headers=self.headers).text
    routeList = json.loads(response).get('data').get('routeList')
    #循环这个数据集合
    print("接受的数据集合:",routeList)
    if(routeList!='' and routeList!=None):
        for route in routeList:
          if len(route.get('legs')) == 1:
              print("开始存储数据库....")
              legs = route.get('legs')[0]
              flight = legs.get('flight')
              airlineName= flight.get('airlineName')# company
              flightNumber= flight.get('flightNumber')# companyid
              airportName=flight.get('departureAirportInfo').get('airportName')#portname
              departureDate=flight.get('departureDate')#starttime
              arrivalDate=flight.get('arrivalDate')#endtime
              punctualityRate= flight.get('punctualityRate')#rate
              lowestPrice = legs.get('characteristic').get('lowestPrice')  # 经济舱价格
              fprice = legs.get('characteristic').get('lowestCfPrice')#公务舱价格
              #存储到数据库中
              value=[fromcity,tocity,date,airlineName,flightNumber,airportName,departureDate,arrivalDate,punctualityRate,fprice,lowestPrice]
              print("路线:",fromcity,tocity,date,airlineName,flightNumber,airportName,departureDate,arrivalDate,punctualityRate,fprice,lowestPrice)
              self.insert(value)
    else:
        return;

if __name__ == "__main__":
    fly = FLIGHT()
    date ="2020-05-10"
    #创建数据库
    #循环遍历
    fly.xiecheng(date)

完整的city部分是这样的

city={"AAT":"阿勒泰","ACX":"兴义","AEB":"百色","AKU":"阿克苏","AOG":"鞍山","AQG":"安庆","AVA":"安顺","AXF":"阿拉善左旗","BAV":"包头","BFJ":"毕节","BHY":"北海"
		,"BJS":"北京","BPE":"秦皇岛","BPL":"博乐","BPX":"昌都","BSD":"保山","CAN":"广州","CDE":"承德","CGD":"常德","CGO":"郑州","CGQ":"长春","CHG":"朝阳","CIF":"赤峰"
		,"CIH":"长治","CKG":"重庆","CSX":"长沙","CTU":"成都","CWJ":"沧源","CYI":"嘉义","CZX":"常州","DAT":"大同","DAX":"达县","DBC":"白城","DCY":"稻城","DDG":"丹东"
		,"DIG":"香格里拉(迪庆)","DLC":"大连","DLU":"大理","DNH":"敦煌","DOY":"东营","DQA":"大庆","DSN":"鄂尔多斯","DYG":"张家界","EJN":"额济纳旗","ENH":"恩施"
		,"ENY":"延安","ERL":"二连浩特","FOC":"福州","FUG":"阜阳","FUO":"佛山","FYJ":"抚远","GOQ":"格尔木","GYS":"广元","GYU":"固原","HAK":"海口","HDG":"邯郸"
		,"HEK":"黑河","HET":"呼和浩特","HFE":"合肥","HGH":"杭州","HIA":"淮安","HJJ":"怀化","HKG":"香港","HLD":"海拉尔","HLH":"乌兰浩特","HMI":"哈密","HPG":"神农架"
		,"HRB":"哈尔滨","HSN":"舟山","HTN":"和田","HUZ":"惠州","HYN":"台州","HZG":"汉中","HZH":"黎平","INC":"银川","IQM":"且末","IQN":"庆阳","JDZ":"景德镇"
		,"JGD":"加格达奇","JGN":"嘉峪关","JGS":"井冈山","JHG":"西双版纳","JIC":"金昌","JIQ":"黔江","JIU":"九江","JJN":"晋江","JMJ":"澜沧","JMU":"佳木斯","JNG":"济宁"
		,"JNZ":"锦州","JSJ":"建三江","JUH":"池州","JUZ":"衢州","JXA":"鸡西","JZH":"九寨沟","KCA":"库车","KGT":"康定","KHG":"喀什","KHN":"南昌","KJH":"凯里","KMG":"昆明"
		,"KNH":"金门","KOW":"赣州","KRL":"库尔勒","KRY":"克拉玛依","KWE":"贵阳","KWL":"桂林","LCX":"龙岩","LDS":"伊春","LFQ":"临汾","LHW":"兰州","LJG":"丽江","LLB":"荔波"
		,"LLF":"永州","LLV":"吕梁","LNJ":"临沧","LPF":"六盘水","LUM":"芒市","LXA":"拉萨","LYA":"洛阳","LYG":"连云港","LYI":"临沂","LZH":"柳州","LZO":"泸州"
		,"LZY":"林芝","MDG":"牡丹江","MFK":"马祖","MFM":"澳门","MIG":"绵阳","MXZ":"梅州","NAO":"南充","NBS":"白山","NDG":"齐齐哈尔","NGB":"宁波","NGQ":"阿里"
		,"NKG":"南京","NLH":"宁蒗","NNG":"南宁","NNY":"南阳","NTG":"南通","NZH":"满洲里","OHE":"漠河","PZI":"攀枝花","RHT":"阿拉善右旗","RIZ":"日照","RKZ":"日喀则"
		,"RLK":"巴彦淖尔","SHA":"上海","SHE":"沈阳","SIA":"西安","SJW":"石家庄","SWA":"揭阳","SYM":"普洱","SYX":"三亚","SZX":"深圳","TAO":"青岛","TCG":"塔城","TCZ":"腾冲"
		,"TEN":"铜仁","TGO":"通辽","THQ":"天水","TLQ":"吐鲁番","TNA":"济南","TSN":"天津","TVS":"唐山","TXN":"黄山","TYN":"太原","URC":"乌鲁木齐","UYN":"榆林","WEF":"潍坊"
		,"WEH":"威海","WMT":"遵义(茅台)","WNH":"文山","WNZ":"温州","WUA":"乌海","WUH":"武汉","WUS":"武夷山","WUX":"无锡","WUZ":"梧州","WXN":"万州","XFN":"襄阳","XIC":"西昌"
		,"XIL":"锡林浩特","XMN":"厦门","XNN":"西宁","XUZ":"徐州","YBP":"宜宾","YCU":"运城","YIC":"宜春","YIE":"阿尔山","YIH":"宜昌","YIN":"伊宁","YIW":"义乌","YNJ":"延吉"
		,"YNT":"烟台","YNZ":"盐城","YTY":"扬州","YUS":"玉树","YZY":"张掖","ZAT":"昭通","ZHA":"湛江","ZHY":"中卫","ZQZ":"张家口","ZUH":"珠海","ZYI":"遵义(新舟)"}
		"""{"KJI":"布尔津"}"""

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬虫之获取携程网所有航班机票信息,与携程网共同变化的爬虫博客 的相关文章

  • 面向对象——类和对象

    一 面向对象的概念 面向对象是一种符合人类思维习惯的编程思想 现实生活中存在各种形态不同的事物 xff0c 这些事物之间存在着各种各样的联系 在程序中使用对象来映射现实中的事物 xff0c 使用对象的关系来描述事物之间的联系 xff0c 这
  • 洛谷 P1593 因子和 (升级版!)

    题目描述 已知一个等差数列 an 的首项为 且对于任意两个正整数 i xff0c j 都存在ai 43 aj 也在该数列中 求所有可能的公差 d 的和 答案对 99824353 取模 输入输出格式 输入格式 xff1a 输入的第一行为两个正
  • ubuntu断网、网络设置消失的解决办法

    不知道为啥 xff0c Ubuntu20 04搭配VM16Pro时有很大概率的出现这Bug xff0c 虽然网络上有了很多的帖子记录了解决办法 xff0c 但遇到了还是要记录一下的 环境 1 span class token punctua
  • 特殊三分图匹配

    特殊三分图匹配 64 LOJ 一般三分图的匹配需要运用基于拉格朗日松弛的分支定界法 xff0c 并运用启发式算法得到较优的初始下界 已被证明是NPC问题 出题者在此说明一般三分图的匹配可以解决本题 题目描述 三个点集X xff0c Y xf
  • sort函数中的cmp函数使用

    sort函数中的cmp函数使用 在leetcode上面刷题的时候发现大家使用sort函数的时候总能用出一些与众不同的比较方式 xff0c 其中使用cmp自己定义排序放的非常的方便 xff0c 因此我们这里记录一下cmp的使用 首先我们先来看
  • IDEA中Maven依赖提示红线下载不了的解决方案

    主要原因 xff1a 本地出现了不完整的依赖包 xff08 可以在本地仓库中检查是否有以 lastUpdated结尾的文件而非项目所需要的具体jar包 xff09 出现 lastUpdated文件的原因一般是在网络问题下 xff0c Mav
  • python练习100题(5)

    题目054 xff1a 取一个整数a从右端开始的4 7位 切片是左闭右开的 a span class token operator 61 span span class token number 123456789 span a span
  • 云服务器ECS

    云服务器 Elastic Compute Service ECS 是一种简单高效 安全可靠 处理能力可弹性伸缩的计算服务 其管理方式比物理服务器更简单高效 用户无需提前购买硬件 xff0c 即可迅速创建或释放任意多台云服务器 借助云服务器能
  • 【macOS】Desktop桌面文件突然消失不见解决办法

    问题出现 今天整理桌面的时候 xff0c 移动某个文件夹然后松手后突然就不见了 xff0c 但是在Finder中搜索文件夹找到该文件夹并查看简介 xff0c 发现确实显示是Desktop文件夹下 xff0c 并且不是隐藏文件夹 xff0c
  • 远程登录

    详情请参考 xff1a http www hzol com cn bbs dispbbs asp boardid 61 137 amp id 61 27352 win2003 远程登录 解析WIN2003之远程桌面连接 远程桌面连接 是为W
  • ffmpeg转换avi、mp4等视频格式为yuv格式

    使用ffmpeg转换视频文件为yuv420 xff08 NV12 xff09 格式命令 xff1a ffmpeg i xxx avi pix fmt nv12 s 2880x1620 ss 00 03 12 t 00 00 28 y xxx
  • 免费资料 | RoboMaster资料包分享,备赛福利来啦

    资料包链接 xff1a 腾讯文档 RoboMaster 产品资料全集合 RoboMaster 产品资料全集合 2021年天之博特参与协办的首届RMUA人工智能挑战赛中国赛赛事 xff0c 见证了各个高校参赛队伍每一个奋力拼搏的瞬间 xff0
  • PostgreSQL与MySQL对比

    PostgreSQL与MySQL对比 都属于开放源码的一员 xff0c 性能和功能都在高速地提高和增强 MySQL AB的人们和PostgreSQL的开发者们都在尽可能地把各自的数据库改得越来越好 xff0c 所以对于任何商业数据库使用其中
  • 最简单最节省成本的锂电池充电电路!拆开火火兔,搬起小板凳,听老梁分析...

    作者 xff1a LR梁锐 xff0c 整理 xff1a 晓宇 微信公众号 xff1a 芯片之家 xff08 ID xff1a chiphome dy xff09 用了一年的火火兔坏了 xff0c 充不了电 作为一名合格的电工 xff0c
  • 题解 教主的魔法(分块学习记录)

    64 luogu 看到询问个数少 xff0c 分块的复杂度能过 xff0c 于是人生第一次打了分块 xff0c 居然A了 据说也有线段树瞎搞的 xff0c 不过我不会写 总之 xff0c 边角暴力 xff0c 块内二分 xff0c 受影响的
  • Ubuntu虚拟机找不到共享文件夹的解决办法

    Ubuntu虚拟机找不到共享文件夹的解决办法 一 查看共享文件夹是否设置成功 vmware hgfsclient 二 挂载共享文件夹到 mnt目录下 sudo vmhgfs fuse host mnt o nonempty o allow
  • 秒懂函数回调机制,回调函数看这篇就够了

    什么是回调函数 友情提示 xff1a 原理介绍部分摘自 xff1a https www jianshu com p 2f695d6fd64f 有一定基础的直接跳过即可 xff0c 直接查看后面精彩部分 回调函数就是一个通过函数指针调用的函数
  • vbox下安装archlinux

    博主linux小白一个 xff0c 一直想试试archlinux xff0c 最近终于有时间了 xff0c 一番努力之后成功了 xff0c 写出来与大家分享 archlinux版本 2013 06 01 archlinux的优点就不说了 x
  • IDL环境下,HDF文件转TIFF格式

    在IDL环境下 xff0c 将HDF文件转TIFF格式 在遥感图像处理过程中 xff0c 我们经常遇到HDF文件 xff0c 如modis影像数据 那么HDF数据到底是怎样的呢 xff1f 百科的解释 xff1a HDF是用于存储和分发科学
  • ModuleNotFoundError:No Module named‘lpips‘问题怎么解决?

    今天在复现论文的时候 xff0c 发现配置环境中缺少一个 34 lpips 34 的包 这里记录一下 xff0c 给有需要的小伙伴 废话不多说 xff0c 直接上干货 xff1a 1 打开 https pypi org xff0c 输入缺少

随机推荐

  • bat文件批处理vcbuild、msbuild或者devenv

    最近用bat文件调用vcbuild或者msbuild xff0c 对于只调用简单的命令行 xff0c 可以很快上手 xff0c 可以查询msdn的关于msbuild的使用指导http msdn microsoft com zh cn lib
  • Delphi源程序格式书写规范

    1 规范简介 本规范主要规定Delphi源程序在书写过程中所应遵循的规则及注意事项 编写该规范的目的是使公司软件开发人员的源代码书写习惯保持一致 这样做可以使每一个组员都可以理解其它组员的代码 xff0c 以便于源代码的二次开发记忆系统的维
  • NoMachine出现 The session negotiation failed的解决方案及踩坑总结

    问题情况 xff1a 我A电脑输入用户名和密码可以远程B电脑 xff0c B电脑输入用户名密码就是登录不上A电脑 B电脑上密码是用的账户密码 xff08 就是图标是一把钥匙的那个 xff09 A电脑上的密码是用的PIN密码 xff08 Wi
  • 利用Python+阿里云实现DDNS(动态域名解析)

    利用Python 43 阿里云实现DDNS 动态域名解析 因需求公司路由器公网ip不是动态的 xff0c 需要及时的修改阿里云的域名解析 前期准备 二 准备 1 公网IP xff08 向运营商申请的动态IP xff09 2 域名 xff08
  • 已知入栈顺序,总结出栈顺序的规律

    规律 xff1a 出栈的每一个元素的后面 xff0c 其中比该元素先入栈的一定按照入栈逆顺序排列 举例说明 xff1a 已知入栈顺序 xff1a 1 2 3 4 5 判断出栈顺序 xff1a 4 3 5 1 2 结果 xff1a 不合理 x
  • Linux系统使用cpulimit对CPU使用率进行限制

    介绍 cpulimit 是一个限制进程的 CPU 使用率的工具 xff08 以百分比表示 xff0c 而不是以 CPU 时间表示 xff09 当不希望批处理作业占用太多 CPU 时 xff0c 控制批处理作业很有用 目标是防止进程运行超过指
  • 题解·连续攻击游戏

    64 luogu 看上去这是一道二分图题 xff0c 将点i和它的两个属性值分别作为两个点集 xff0c 分别连边后跑匈牙利树 xff0c 若找不到匹配则输出解 span class token macro property span cl
  • Linux系统内网穿透教程

    Linux系统内网穿透可以通过使用SSH反向隧道 NAT端口映射 VPN等多种方式实现 xff0c 下面分别介绍这三种方式的实现方法 1 SSH反向隧道 SSH是一种加密的远程登录协议 xff0c 可以通过SSH反向隧道来实现内网穿透 首先
  • cpufreq 之powersave和performance governer的实现

    我们再来看看powersave的实现 xff0c 如下所示event是CPUFREQ GOV START时 xff0c 即开始这个governer时直接调用 cpufreq driver target来设定最低频率 19 static in
  • SQL 入门,看这篇就够了 ---- 基础篇

    目录 目录 目录 数据库安装 数据库基本概念 数据库管理系统 xff08 DBMS xff09 的分类 SQL 语句 创建 删除 更新操作 创建数据库 xff08 CREAT DATABASE xff09 创建表 删除表 更新表 查询 筛选
  • vi编辑器 编辑模式及命令模式常用命令

    在网上虽然有许多类似的文章 xff0c 但写的很杂 xff0c 不如这本书上看着顺畅 本文是 PHP 43 MySQL开发实战 220页到222页的内容 vi编辑器 文本编辑器是所有计算机系统中最常用的一种工具 UNIX下的编辑器有ex s
  • bash:yum:command not found 解决办法【转】

    今天需要用rhel7测试opencv 想安装opencv的时候 xff0c 突然yum不能用了 提示 xff1a bash xff1a yum command not found 在网上找到了以下方法 xff0c 亲测有效 xff08 根据
  • 解密微信数据库文件解析

    图解说明 xff1a 微信大量数据存储在本地比如 xff1a 联系人 xff08 包含好友地区 电话 通过那种方式添加 xff09 聊天内容 xff08 图片 文字 语音 视频 位置 名片 其他app分享链接 xff09 聊天室 收藏信息
  • 解决gpg: Can't check signature: public key not found问题

    在网上下载安装repo xff0c 使用repo下载代码的过程中 xff0c 出现了以下错误 xff1a object 666d534636d262cbfd971509dd0f0be0cddb2e11 type commit tag v1
  • 51-单片机---定时器0和定时器1---8位自动重装载(模式2)-16位定时计数(模式1)

    16位定时计数 xff08 工作方式1 xff09 初始化函数 void timer init TMOD 61 0x01 TH0 61 0x4C TL0 61 0x00 EA 61 1 ET0 61 1 TR0 61 1 初始化定时器运行
  • Win10 80端口被占用怎么办?Win10系统80端口被占用的解决方法

    很多用户在安装PC软件的时候出现提示 80端口被占用 xff0c 请使用其他端口 xff0c 主要原因是一些系统服务默认的安装端口是80 xff0c 容易和已安装的ISS等其他服务冲突 xff0c 导致一些服务项无法启动 阅读下文了解 Wi
  • 基于Cortex M3 (lpc1768)头文件 lpc17xx.h 的分析注释

    64 file LPC17xx h 64 brief CMSIS Cortex M3 Core Peripheral Access Layer Header File for 64 version V1 07 NXP LPC17xx Dev
  • Linux:如何创建用户

    概述 下面将演示创建用户 zyq01 xff08 1 xff09 输入命令 xff1a sudo useradd zyq01 xff0c 回车 xff0c 创建用户 xff1b xff08 2 xff09 输入命令 xff1a ls xff
  • python爬取携程网航班机票信息并存储到数据库中,2020年最新版本

    我们先看一下携程网的信息 从以上我们可以获取两个信息 1 我是从上海到成都的 2 7条航班信息 教你如何爬虫 我不教静态网页的爬虫 xff0c 因为太简单了 xff1b 我们直接上手携程网 我们到这个上述这个页面以后 xff0c 我推荐用谷
  • python爬虫之获取携程网所有航班机票信息,与携程网共同变化的爬虫博客

    我们看一下效果 我实现的功能是 1 爬虫热门城市之间航班信息的查询 2 存储到mysql数据库中 xff1b 当然你也可以爬取所有城市之间的航班信息 xff0c 我会提供完整的city代码给你 xff1b 只是我需要实现的是自动功能 xff