携程酒店数据爬取2020.5

携程酒店数据爬取2020.5

1. 开题

目前网上有好多爬取携程网站的教程,大多数通过xpath,beautifulsoup,正则来解析网页的源代码。然后我这个菜b贪方便,直接copy源码的xpath,paste在xpath helper改改规则。xpath helper识别出结果后,我就已经看到了成功的希望,xpath真香。在这里插入图片描述
然而,意想不到的是,在进行测试时,却匹配不出任何结果,我手中的鸡腿(xpath)就不香了,曾一度怀疑,是我水平太菜了,没写正确,然后一直回去学xpath知识,一边学啊,一边测试,甚至中途换了beautifulsoup,正则,selenium(建议不要用selenium,打开网站时候会自动跳转到携程账号登录页面,估计是携程反爬的设置)。直到后来才发现解析的源代码根本就没包含我想要的信息(酒店名称,酒店地址这些东西,携程有可能设置了反爬),这也说明了,我水平真的菜,才会一直没发现源代码的错误(我暂且认为源代码中没有显示酒店名称,地址这类信息)

>>> hotel_name = html.xpath('//p[@class="hotel_item_htladdress"]/text()')    
>>> print(hotel_name)
[]
>>> hotel_name = html.xpath('//li[@class="hotel_item_name"]/h2')
>>> print(hotel_name)
[]

2.人肉搜索器的变化

因为写不出来代码,而业务上需要信息,故我这个菜b只能一边Ctrl C + Ctrl v,手指都快抽筋了,才把部分数据给复制下来,最后只能祭出GitHub大法了
在这里插入图片描述
在看完了几个大佬写的代码,看不懂还是看不懂。
但是抄,我是专业的,这孩子从小就是抄袭砖家,Ctrl A + Crtl c + crl v 三键下去,一气呵成。
感谢让抄的老哥(author: songwei,附上他的网址:https://github.com/songweiwei/pachong/blob/master/main.py#L29)
在抄完之后要干吗?改啊!
要怎么改啊?针对这一点,我是会的。
同学们,小葵花妈妈开课了,孩子会抄,不会改,怎么办呢?多半是上课没好好学,打一顿就好了。咳咳,偏题了。
首先呢,我们先看看携程网站的网址,它的网址是固定了,也就是不管你翻到第几页,它的网址一成不变。稍微学过点爬虫的同学都知道,我们爬取网站都是通过网址的页数进行翻页,那没能通过页数进行解析,怎么办呢?
在这里插入图片描述
此时,百度就是你的老师,你要熟练地打开网站,敲上你最喜欢的网址,准备好纸巾…呸呸呸,又飙车了。
本菜b饱览群书(抄袭大佬的观点),在网页反馈的信息中后面添加p1,p2便可实现翻页的功能:
第一页:https://hotels.ctrip.com/hotel/guangzhou32/p1
第二页:https://hotels.ctrip.com/hotel/guangzhou32/p2
在这里插入图片描述
看到这里,细心的同学就会想到,楼主这个菜b不是刚刚才说完,网页的源代码不是没有想要的信息(酒店名称,地址)吗?即便会翻页,那网页的源代码没信息,还翻个屁啊?
对,没错,翻个屁,就是没什么卵用。
于是,我们要从其他地方入手。
楼主这个菜b又饱览群书,通过百度老师,猛然发现@icmp_no_request大神的帖子(https://blog.csdn.net/pandalaiscu/article/details/87644235),于是乎,我在抄的路上又迈开一大步,学会通过接口获取数据。
在AjaxHotelList.aspx文件发现了存储信息的位置,其格式是json,其中hotelPositionJSON里面存储了25条数据(一个网页只显示25条数据)
在这里插入图片描述
hotelPositionJSON中的url是打开酒店详细信息的“钥匙”,能查看酒店的具体信息(如介绍,设施等情况)
在这里插入图片描述
但在打开酒店具体信息的网址后,我们会发现一些问题,如下图中的原始网站只显示“联系方式”,这需要手工点击“联系方式”字段才能显示电话号码,若是通过xpath解析,也只是出现个“联系方式”的字段,因此这一块需要解析原网站的网页元素,针对这一块内容,我这边是用正则来写的,没错,“正则”真香。
在这里插入图片描述
其次对于酒店品牌和集团的获取,我们这里用回了xpath进行解析(因为网页的源代码已经有我们想要的信息)。由于携程的品牌名称显示在网站的首头,而部分网站没有品牌名称(如第一种和第二种所示),只有第三钟包含我们想要的品牌名称字段(酒店品牌:希尔顿)。此外部分酒店网页也是没有显示酒店集团的元素,若是通过xpath定位,有可能导致匹配信息错误。
针对这些问题,我们通过判断返回的xpath值若是为空,则不存在该元素来规避数据错误值
在这里插入图片描述
在这里插入图片描述

3.开始征程之路

作好了以上的解析后,我们可以开始写(改大神的)代码了
3.1 构建存储器

#构建数组存储数据
#构建数组存储数据
hotel_name = [] #酒店名称
hotel_address = []  #酒店地址
hotel_iphone = []   #酒店电话
hotel_brand = [] #酒店品牌
hotel_business = [] #酒店所属集团

3.2 构建请求头
其中user-agent用了fake_useragent包

url = "https://hotels.ctrip.com/Domestic/Tool/AjaxHotelList.aspx"
headers = {
    'Content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Origin': 'https://hotels.ctrip.com',
    'Referer': 'https://hotels.ctrip.com/hotel/guangzhou32',
    'accept': '*/*',
    'user-agent': str(UserAgent().random)
}

3.3 构造请求字段

    #page是页码(翻页),广州cityID是32(北京cityID是1)
    formData = {
        'cityId': 32,	#城市id号
        'page': 1	#页码
    }

3.4 发起网站请求

    # 发起网络请求
    r = requests.post(url, data=formData, headers=headers)
    r.raise_for_status()
    r.encoding = r.apparent_encoding    #防止出现乱码现象

3.5 解析网站元素

       # 解析 json 文件,提取酒店数据
    js=json.loads(r.text)
    json_data = json.loads(r.text)['hotelPositionJSON']

    for item in json_data:
        hotelName = item['name']
        hotelAdress = item['address']
        hotelUrl = item['url']

        hotel_name.append(hotelName)
        hotel_address.append(hotelAdress)

        #在首页打开酒店url,获取电话号码,其中电话隐藏了,因此用正则直接提取
        new_hotelUrl = "https://hotels.ctrip.com" + item['url']
        req = requests.get(new_hotelUrl,headers=headers)
        page = req.text
        pattern = re.compile('<span id="J_realContact" data-real="(.*?)&nbsp;&nbsp',re.S)
        item_iphone = pattern.findall(page)
        hotel_iphone.append(item_iphone)    #正则写入数据的形式是列表,这里再次把列表数据写入列表
        
        #xpath解析酒店品牌+集团
        html = etree.HTML(page)
        hotelBrand = html.xpath('//*[@id="base_bd"]/div[2]/a[3]/text()')
        
        if fnmatch(str(hotelBrand),"*区*"):
            hotel_brand.append("无")
        elif len(hotelBrand) ==0:
            hotel_brand.append("无")
        else:
            hotel_brand.append(hotelBrand)
        
        hotelBusiness = html.xpath('//*[@id="hotel_info_comment"]/div/span/text()')
        
        if len(hotelBusiness) == 0:
            hotel_business.append("无")
        else:
            hotel_business.append(hotelBusiness)

3.6 存储数据

#储存
wb = workbook.Workbook()
ws = wb.active
ws.append(["酒店名称","地址",'电话号码','酒店品牌','酒店集团'])

for i in range(0,len(hotel_name)):
    ws.append([hotel_name[i],hotel_address[i],hotel_iphone[i][0],hotel_brand[i][0],hotel_business[i][0]])
#存储位置:C:\Users\Administrator
wb.save("携程酒店数据.xlsx")

4.结果展示与不足反思

本次代码由于业务和时间关系,只解析了酒店名称,地址,电话号码,酒店品牌和集团这五个字段,因此各位小伙伴若是要解析其他信息,您可以通过我这篇文章的代码思路继续进行解析。
最后我反思一下本次代码的不足:

  1. 没有设置ip代理池,若是数据量大,必然会封ip。后期用代理ip进行测试,发现一个代理ip短时间内抓100条数据就失效了
  2. 获取25条数据时,需要打开25个网页,也就说打开一个网页需要一秒时间,若是要爬取大量的数据,其时间耗费长。后期仍需努力学习啊。

在这里插入图片描述

5.完整代码

import requests
from lxml import etree
from fake_useragent import UserAgent
import os, re, json, traceback,random,time
from openpyxl import workbook  # 写入Excel表所用
from fnmatch import fnmatch

#启用时间
start = time.time()

#构建数组存储数据
hotel_name = [] #酒店名称
hotel_address = []  #酒店地址
hotel_iphone = []   #酒店电话
hotel_brand = [] #酒店品牌
hotel_business = [] #酒店所属集团

#构建请求头
url = "https://hotels.ctrip.com/Domestic/Tool/AjaxHotelList.aspx"
headers = {
    'Content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Origin': 'https://hotels.ctrip.com',
    'Referer': 'https://hotels.ctrip.com/hotel/guangzhou32',
    'accept': '*/*',
    'user-agent': str(UserAgent().random)
}

#主代码
for i in range(1,10):
    print("爬取第%d页" %i )
    proxy = ["103.233.152.140:8080","222.249.238.138:8080","101.4.136.34:8080","58.253.66.47:8080"]
    proxies = {"http": str(random.choice(proxy))}

    #page是页码(翻页),广州cityID是32(北京cityID是1)
    formData = {
        'cityId': 32,
        'page': i
    }

    # 发起网络请求
    r = requests.post(url, data=formData, headers=headers,proxies=proxies)
    r.raise_for_status()
    r.encoding = r.apparent_encoding    #防止出现乱码现象

    # 解析 json 文件,提取酒店数据
    js=json.loads(r.text)
    json_data = json.loads(r.text)['hotelPositionJSON']

    for item in json_data:
        hotelName = item['name']
        hotelAdress = item['address']
        hotelUrl = item['url']

        hotel_name.append(hotelName)
        hotel_address.append(hotelAdress)

        #在首页打开酒店url,获取电话号码,其中电话隐藏了,因此用正则直接提取
        new_hotelUrl = "https://hotels.ctrip.com" + item['url']
        req = requests.get(new_hotelUrl,headers=headers)
        page = req.text
        pattern = re.compile('<span id="J_realContact" data-real="(.*?)&nbsp;&nbsp',re.S)
        item_iphone = pattern.findall(page)
        hotel_iphone.append(item_iphone)    #正则写入数据的形式是列表,这里再次把列表数据写入列表
        
        #xpath解析酒店品牌+集团
        html = etree.HTML(page)
        hotelBrand = html.xpath('//*[@id="base_bd"]/div[2]/a[3]/text()')
        
        if fnmatch(str(hotelBrand),"*区*"):
            hotel_brand.append("无")
        elif len(hotelBrand) ==0:
            hotel_brand.append("无")
        else:
            hotel_brand.append(hotelBrand)
        
        hotelBusiness = html.xpath('//*[@id="hotel_info_comment"]/div/span/text()')
        
        if len(hotelBusiness) == 0:
            hotel_business.append("无")
        else:
            hotel_business.append(hotelBusiness)
    

#储存
wb = workbook.Workbook()
ws = wb.active
ws.append(["酒店名称","地址",'电话号码','酒店品牌','酒店集团'])

for i in range(0,len(hotel_name)):
    ws.append([hotel_name[i],hotel_address[i],hotel_iphone[i][0],hotel_brand[i][0],hotel_business[i][0]])
#存储位置:C:\Users\Administrator
wb.save("携程酒店数据.xlsx")

#结束
end = time.time()
print("耗时(分钟):",(end - start)/60)
print("爬取页数:",len(hotel_name)/25)
世界者
关注 关注
  • 10
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
爬虫第六课:爬取携程酒店数据
认真写的博客
01-09 2万+
首先打开携程所有北京的酒店http://hotels.ctrip.com/hotel/beijing1 简简单单,源代码中包含我们需要的酒店数据,你以为这样就结束了?携程的这些数据这么廉价地就给我们得到了?事实并不是如此,当我们点击第二页的时候出现问题:虽然酒店数据改变了,但是我们发现该网页的网址却没有改变,这也就造成了源代码中酒店数据不改变,还是第一页的数据,如下图所示。我们遇到的第一个...
Python爬虫-爬取目标城市酒店数据
11-12
通过python爬虫采集城市的酒店数据 内容概要:使用python采集酒店数据 适用人群:做酒店数据市场调研,数据分析报告的人群 使用场景及目标:需要依靠python3环境,执行爬虫脚本 其他说明:需要使用开发者工具捕捉网站中的目标城市对应的cityCode,城市编号,如有侵权,联系删除
python 爬取携程全国旅游景点信息-2024.4.13
最新发布
britlee的博客
04-13 880
携程网是中国领先的在线旅行服务公司,提供酒店预订、机票预订、旅游度假、商旅管理等服务。携程网上有大量的旅游景点和酒店信息,这些信息对于旅行者和旅游业者都有很大的价值。通过爬虫技术,我们可以从携程网上获取这些信息,并进行数据清洗、数据分析、数据可视化等操作,从而得到有用的洞察和建议。
java爬取携程酒店评价信息
11-05
java爬虫爬取携程酒店的评价信息。以及eleven参数的生成方法。
Java数据爬取——爬取携程酒店数据(二)
jianiuqi的专栏
11-25 9094
在上篇文章Java数据爬取——爬取携程酒店数据(一)爬取所有地区后,继续根据地区数据爬取酒店数据1.首先思考怎样根据地域获取地域酒店信息,那么我们看一下携程上是怎样获得的。 还是打开http://hotels.ctrip.com/domestic-city-hotel.html 这个地址,随便点击一个地区进去(这里我选取澳门作为示例),点击第二页数据,很高兴发现http://hotels.ctri
携程获取景点详情 API接口(携程开放平台合作)
API_18870278351的博客
03-11 1300
携程提供了获取景点详情的API接口,具体如下:请求地址:​​前往测试​​公共参数请求参数请求参数:num_iid=138153参数说明:num_iid:景点id,响应参数Version: Date:2024-01-21item请求示例 -- 请求示例 url 默认请求参数已经URL编码处理 curl -i "https://api-gw.onebound.cn/xiecheng/item_get_scenic/?key=<您自己的apiKey>&secret=<您自己
携程旅游网与马蜂窝游客记录爬取
阿优乐扬的博客
10-24 7250
前言:这是我学习Python爬虫以来,第一次使用python进行大规模的进行数据挖掘。邀请我加入她们科研项目的是工商学院的彭老师,做一个关于避暑旅游的课题。当他们需要获取携程旅游笔记时,由于文章的内容太多,思路也没有考虑好,无法使用数据采集器把笔记放入Excel。于是找到了我们信息学院寻求方法帮助,我的辅导员老师就向她推荐了我。终于有机会进行大型的项目实战了,非常幸运能参与这次的项目。但也由于平...
携程网景点评论爬虫
weixin_67157303的博客
06-01 2754
本人小白,就是单纯地把博主的代码打了出来,然后有一些细微的地方进行了调整,便于代码可以在我的电脑上运行。这里就正常输入信息就可以,网站连接就找景点的链接。然后回车稍微等待一会会就会出来数据啦!将数据导出为excel表格。
Python网络爬虫实战:爬取携程酒店评价信息
热门推荐
py嘎嘎的博客
11-04 1万+
这个爬虫是在一个小老弟的委托之下写的。 他需要爬取携程网上的酒店的评价数据,来做一些分词和统计方面的分析,然后来找我帮忙。 爬这个网站的时候也遇到了一些有意思的小麻烦,正好整理一下拿出来跟大家分享一下。 这次爬取过程稍微曲折,各种碰壁,最终成功的过程,还是有点意思。 所以本文我会按照自己当时爬取的思路来讲述,希望能给大家一些思路上的启发。 分析部分略长,如果赶时间可以直接拉到最下面,自取代码。 如果是想学习爬虫的话,最好还是跟着文章的思路走...
爬取携程酒店信息
m0_69003698的博客
10-13 1683
爬取携程酒店信息
自动化携程酒店爬虫
IT99qky的博客
06-11 3880
一、查看chrome版本 浏览器:chrome://version/ 二、下载传送门 url:http://chromedriver.storage.googleapis.com/index.html 根据自己的版本进行下载 放入C:\Program Files\Google\Chrome\Application 三、由于携程
携程机票爬取案例.zip
08-05
对应 Uibot实践题(非企业级框架)流程
爬取携程酒店数据CTripSpider.zip
04-07
酒店管理系统】 酒店管理系统是一种用于帮助酒店管理和运营的软件系统。这种系统通常涵盖多个方面,包括客房预订、前台管理、客户关系管理、财务管理、员工管理、库存管理、报告和分析等。通过使用酒店管理系统,...
基于Python实现的携程机票数据爬取源码
03-25
项目概述:本项目采用Python语言开发,旨在实现对携程机票数据爬取。整个项目由多个模块组成,包括HTML、CSS、JavaScript和Python等,共计82个文件。具体文件类型分布如下:HTML文档19个,Python脚本16个,CSS样式...
python爬取携程网评论.zip
11-10
python爬取携程网评论.zip
Python爬取携程酒店信息
qq_44331100的博客
10-31 3363
代码 from selenium import webdriver from time import sleep import xlwt # 进行excel操作 #谷歌驱动 告诉电脑在哪打开浏览器 driver=webdriver.Chrome(executable_path="D:/chromedriver.exe") #打开网页 driver.get("https://hotels.ctrip.com/?allianceid=4897&sid=798178&bd_vid=8152353
酒店接口 携程酒店在线预订
appjiekou
12-08 5888
携程酒店信息查询,订酒店接口,在线预订和支付下单。 接口名称:订酒店接口 接口平台:api开放平台 接口地址:http://api2.juheapi.com/xiecheng/hotel/avail 支持格式:json 请求方式:http post 请求参数说明: 名称 类型 必填 说明 HotelCode s
Python爬虫爬取酒店评价(携程
qq_34774456的博客
05-06 8981
Python爬虫爬取携程酒店评价 审查携程酒店评价页面 最经有个需求是爬携程上某酒店的用户评价,在审查评论界面后发现了以下请求,贴一下: https://hotels.ctrip.com/Domestic/tool/AjaxHotelCommentList.aspx? MasterHotelID=5209137&hotel=5209137&NewOpenCount=0&Au...
主题酒店api,携程酒店信息查询
chuang5890369309的博客
12-04 717
主题酒店api,携程酒店信息查询,在线预订和支付下单。(!注post内容是json串如{"Key":"appkey"}而不是Key=appkey,建议使用浏览器插件测试,如火狐的HttpReqeuster,谷歌的DHC) 接口名称:主题酒店api 接口平台:api开放平台 接口地址:h...
携程酒店数据爬取青城山
11-25
以下是携程酒店数据爬取青城山的Python代码示例: ```python import requests import json import prettytable as pt # 读取城市ID with open('City.json', 'r', encoding='utf-8') as f: city_json = json.load(f) city_id = city_json['青城山'] # 构造请求URL url = 'https://hotels.ctrip.com/Domestic/Tool/AjaxHotelList.aspx' params = { 'city': city_id, 'page': 1 } # 发送请求并解析数据 hotel_list = [] while True: response = requests.get(url, params=params) data = json.loads(response.text) hotels = data['hotelList'] if not hotels: break for hotel in hotels: hotel_list.append([ hotel['hotelName'], hotel['positionArea'], hotel['starName'], hotel['price'], hotel['score'], hotel['commentCount'] ]) params['page'] += 1 # 输出数据 table = pt.PrettyTable() table.field_names = ['酒店名称', '位置', '星级', '价格', '评分', '评论数'] for hotel in hotel_list: table.add_row(hotel) print(table) ``` 该代码使用requests模块向携程酒店数据接口发送请求,获取青城山地区的酒店数据,并使用prettytable模块将数据以表格形式输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 携程酒店数据爬取2020.5 10335
  • 购物篮分析( Apriori算法)—零售数据实战 9234
  • RFM模型—零售数据实战 1776
  • Python+Selenium模拟问卷星填写 940

分类专栏

  • 笔记 1篇

最新评论

  • 携程酒店数据爬取2020.5

    kuangkengyabozi: 没有翻页码的怎么实现下拉获取数据

  • 携程酒店数据爬取2020.5

    hijacklei: 之前爬了 反爬现在随时会变 你得根据实际情况改改代码

  • 携程酒店数据爬取2020.5

    J_Yanhui: 大佬 你爬到了嘛

  • Python+Selenium模拟问卷星填写

    小jj小jj小: 这个很顶 想跟您联系一下子

  • 购物篮分析( Apriori算法)—零售数据实战

    世界者: 看看其他教程(都附有数据源),我这个数据源不怎么好(数据源存在很多人为骚操作)

最新文章

  • 购物篮分析( Apriori算法)—零售数据实战
  • RFM模型—零售数据实战
  • Python+Selenium模拟问卷星填写
2021年2篇
2020年1篇
2019年1篇

目录

目录

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司绵阳企业网站改版多少钱坑梓网站优化推荐成都设计公司网站多少钱龙岗百度竞价包年推广价格茂名SEO按天扣费报价潍坊企业网站建设哪家好光明百姓网标王多少钱怀化百度seo价格马鞍山网站设计哪家好洛阳网站定制多少钱揭阳网站优化按天收费多少钱德州关键词排名公司吉林百度竞价包年推广报价安阳百度网站优化多少钱南澳网站推广系统报价萍乡网站推广公司沙井企业网站制作哪家好襄阳企业网站设计公司丹竹头百度竞价包年推广多少钱保山网站优化推广多少钱绍兴关键词按天计费哪家好平湖SEO按天计费哪家好河源seo优化推荐丹东网站建设设计报价襄阳品牌网站设计公司霍邱百度竞价报价南京外贸网站建设价格张家口网站搭建推荐观澜企业网站设计推荐南联优化价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化