火车票查询系统(一)——利用python实现监控12306余票查询

22 篇文章 4 订阅
订阅专栏

最近春运高峰,本人从12月开始买过年回家的火车票,然鹅~现实总是那么残酷,放票时间记不住,要么就是不能实时盯着刷票,外面的软件也不知道靠不靠谱,反正是没买到票,所以一怒之下,自己做一个12306余票查询系统,可以实现以下一些功能:

1. 设置目标位置进行查询余票
2. 通过设定条件监控到余票后进行12306账号登录
3. 12306登录及图片识别(自动登录功能)
4. 自动下单功能
5. 邮件通知付款功能

ok,整个博客内容包括以上代码实现,我们按照惯例,循序渐进,先讲第一篇【实现12306余票查询】

-----------------------------------------------------我是分割线、

第一步:查看12306查询接口
在这里插入图片描述
通过截图我们可以看到,查询接口是:

https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date=2020-01-16&leftTicketDTO.from_station=SZQ&leftTicketDTO.to_station=SHH&purpose_codes=ADULT

https://kyfw.12306.cn/otn/leftTicket/queryZ + data + from_station + to_station + purpose_codes
这样一个连接拼接而成,那我们要做的就是按照他这种格式,传入参数进去即可。

第一步:定义类并对接口参数进行设置和组装

class LeftTicketDTO:
    """
    查询余票参数信息
    """
    def __init__(self, train_date=datetime.date.today().strftime('%Y-%m-%d'), from_station='SZQ',
                 to_station='GZQ', purpose_codes='ADULT'):
        self.train_date = train_date
        self.from_station = from_station
        self.to_station = to_station
        self.purpose_codes = purpose_codes

    def encode_url_para(self):
        paras = ['train_date=' + self.train_date,
                 'from_station=' + self.from_station,
                 'to_station=' + self.to_station]
        p = '&'.join(['leftTicketDTO.' + v for v in paras])
        return p + '&purpose_codes=' + self.purpose_codes

第二步:我们把所需要的车次信息捞出来,进行初始化

class Train:
    """
    车次信息
    """
    def __init__(self, item):
        """
        使用列表顺序初始化火车信息
        :param item: 12306火车信息列表
        :return:
        """
        # self.field_0 = item[0]
        # 状态
        self.status = item[1]
        # 车票号
        self.train_no = item[2]
        # 车次
        self.station_train_code = item[3]
        # 起始站代号
        self.start_station_code = item[4]
        # 终点站代号
        self.end_station_code = item[5]
        # 出发站代号
        self.from_station_code = item[6]
        # 到达站代号
        self.to_station_code = item[7]
        # 出发时间
        self.start_time = item[8]
        # 到达时间
        self.arrive_time = item[9]
        # 运行时长
        self.run_time = item[10]
        # 是否可买
        self.can_buy = item[11]
        self.yp_info = item[12]
        # 出发日期
        self.start_train_date = item[13]
        self.train_seat_feature = item[14]
        self.location_code = item[15]
        self.from_station_no = item[16]
        self.to_station_no = item[17]
        self.is_support_card = item[18]
        self.controlled_train_flag = item[19]
        self.gg_num = item[20]
        self.gr_num = item[21]
        self.qt_num = item[22]
        # 软卧
        self.rw_num = item[23]
        # 软座
        self.rz_num = item[24]
        self.tz_num = item[25]
        # 无座
        self.wz_num = item[26]
        self.yb_num = item[27]
        # 硬卧
        self.yw_num = item[28]
        self.yz_num = item[29]
        # 二等座
        self.edz_num = item[30]
        # 一等座
        self.ydz_num = item[31]
        # 商务特等座
        self.swz_num = item[32]
        # 动卧
        self.dw_num = item[33]
        self.yp_ex = item[34]
        self.seat_types = item[35]
        self.exchange_train_flag = item[36]

    @property
    def key_info(self):
        """
        获取车次的关键信息
        :return:
        """
        return {
            '状态': self.status,
            '车次': self.station_train_code,
            '起始站代号': self.start_station_code,
            '终点站代号': self.end_station_code,
            '出发站代号': self.from_station_code,
            '到达站代号': self.to_station_code,
            '出发时间': self.start_time,
            '到达时间': self.arrive_time,
            '运行时长': self.run_time,
            '是否可买': self.can_buy,
            '出发日期': self.start_train_date,
            '软卧': self.rw_num,
            '软座': self.rz_num,
            '无座': self.wz_num,
            '硬卧': self.yw_num,
            '二等座': self.edz_num,
            '一等座': self.ydz_num,
            '商务特等座': self.swz_num,
            '动卧': self.dw_num
        }


第三步:请求12306地址,进行查询

def get_trains(dto):
    """
    获取余票信息
    :param dto:
    :return:
    """
    # 余票查询链接地址可能会变,其中结尾处的Z可能会被替换为[A-Z],注意!!!
    url = 'https://kyfw.12306.cn/otn/leftTicket/queryZ'
    url = url + '?' + dto.encode_url_para()
    # 请求头
    hds = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/74.0.3729.157 Safari/537.36',
        'Cookie': 'JSESSIONID=F8909A46584B13B74DE18535CC9DFE4;'
    }
    try:
        trains = []
        print('正在查询余票信息:', url)
        # 访问请求链接
        rsp = requests.get(url, headers=hds)
        text = json.loads(rsp.content.decode())

        # 检查返回码
        if text['httpstatus'] != 200:
            print('获取余票信息异常,', text)
            return

        # 获取想要的数据
        result = text['data']['result']
        print('共获取到{0}趟车次信息:'.format(len(result)))
        for v in result:
            item = [f for f in v.split('|')]
            t = Train(item)
            trains.append(t)
    except Exception as e:
        print('获取数据异常, {0} -> {1}'.format(Exception, e))
    return trains

第四步:传参并进行查询

备注:如何看站点唯一标识,可以通过以下接口看:https://kyfw.12306.cn/otn/resources/js/framework/station_name.js
或者直接在12306页面请求,
在这里插入图片描述

def test():
    """
    测试代码
    :return:
    """
    import prettytable

    # 获取票信息
    para = LeftTicketDTO(from_station='IOQ', to_station='SNH', train_date='2020-01-15')
    trains = get_trains(para)
    if not trains:
        print('未找到符合条件的车次信息')
        return

    # 组装信息
    tab = prettytable.PrettyTable()
    # 标题头
    tab.field_names = trains[0].key_info.keys()
    # 组装车次信息
    for t in trains:
        tab.add_row(t.key_info.values())
    # 表格显示车次信息
    print(tab)

完整代码如下:

# -*- coding: utf-8 -*-
import json
import requests
import datetime


class Train:
    """
    车次信息
    """
    def __init__(self, item):
        """
        使用列表顺序初始化火车信息
        :param item: 12306火车信息列表
        :return:
        """
        # self.field_0 = item[0]
        # 状态
        self.status = item[1]
        # 车票号
        self.train_no = item[2]
        # 车次
        self.station_train_code = item[3]
        # 起始站代号
        self.start_station_code = item[4]
        # 终点站代号
        self.end_station_code = item[5]
        # 出发站代号
        self.from_station_code = item[6]
        # 到达站代号
        self.to_station_code = item[7]
        # 出发时间
        self.start_time = item[8]
        # 到达时间
        self.arrive_time = item[9]
        # 运行时长
        self.run_time = item[10]
        # 是否可买
        self.can_buy = item[11]
        self.yp_info = item[12]
        # 出发日期
        self.start_train_date = item[13]
        self.train_seat_feature = item[14]
        self.location_code = item[15]
        self.from_station_no = item[16]
        self.to_station_no = item[17]
        self.is_support_card = item[18]
        self.controlled_train_flag = item[19]
        self.gg_num = item[20]
        self.gr_num = item[21]
        self.qt_num = item[22]
        # 软卧
        self.rw_num = item[23]
        # 软座
        self.rz_num = item[24]
        self.tz_num = item[25]
        # 无座
        self.wz_num = item[26]
        self.yb_num = item[27]
        # 硬卧
        self.yw_num = item[28]
        self.yz_num = item[29]
        # 二等座
        self.edz_num = item[30]
        # 一等座
        self.ydz_num = item[31]
        # 商务特等座
        self.swz_num = item[32]
        # 动卧
        self.dw_num = item[33]
        self.yp_ex = item[34]
        self.seat_types = item[35]
        self.exchange_train_flag = item[36]

    @property
    def key_info(self):
        """
        获取车次的关键信息
        :return:
        """
        return {
            '状态': self.status,
            '车次': self.station_train_code,
            '起始站代号': self.start_station_code,
            '终点站代号': self.end_station_code,
            '出发站代号': self.from_station_code,
            '到达站代号': self.to_station_code,
            '出发时间': self.start_time,
            '到达时间': self.arrive_time,
            '运行时长': self.run_time,
            '是否可买': self.can_buy,
            '出发日期': self.start_train_date,
            '软卧': self.rw_num,
            '软座': self.rz_num,
            '无座': self.wz_num,
            '硬卧': self.yw_num,
            '二等座': self.edz_num,
            '一等座': self.ydz_num,
            '商务特等座': self.swz_num,
            '动卧': self.dw_num
        }


class LeftTicketDTO:
    """
    查询余票参数信息
    """
    def __init__(self, train_date=datetime.date.today().strftime('%Y-%m-%d'), from_station='SZQ',
                 to_station='GZQ', purpose_codes='ADULT'):
        self.train_date = train_date
        self.from_station = from_station
        self.to_station = to_station
        self.purpose_codes = purpose_codes

    def encode_url_para(self):
        paras = ['train_date=' + self.train_date,
                 'from_station=' + self.from_station,
                 'to_station=' + self.to_station]
        p = '&'.join(['leftTicketDTO.' + v for v in paras])
        return p + '&purpose_codes=' + self.purpose_codes


def get_trains(dto):
    """
    获取余票信息
    :param dto:
    :return:
    """
    # 余票查询链接地址可能会变,其中结尾处的Z可能会被替换为[A-Z],注意!!!
    url = 'https://kyfw.12306.cn/otn/leftTicket/queryZ'
    url = url + '?' + dto.encode_url_para()
    # 请求头
    hds = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/74.0.3729.157 Safari/537.36',
        'Cookie': 'JSESSIONID=F8909A46584B13B74DE18535CC9DFE4;'
    }
    try:
        trains = []
        print('正在查询余票信息:', url)
        # 访问请求链接
        rsp = requests.get(url, headers=hds)
        text = json.loads(rsp.content.decode())

        # 检查返回码
        if text['httpstatus'] != 200:
            print('获取余票信息异常,', text)
            return

        # 获取想要的数据
        result = text['data']['result']
        print('共获取到{0}趟车次信息:'.format(len(result)))
        for v in result:
            item = [f for f in v.split('|')]
            t = Train(item)
            trains.append(t)
    except Exception as e:
        print('获取数据异常, {0} -> {1}'.format(Exception, e))
    return trains


def test():
    """
    测试代码
    :return:
    """
    import prettytable

    # 获取票信息
    para = LeftTicketDTO(from_station='IOQ', to_station='SNH', train_date='2020-01-15')
    trains = get_trains(para)
    if not trains:
        print('未找到符合条件的车次信息')
        return

    # 组装信息
    tab = prettytable.PrettyTable()
    # 标题头
    tab.field_names = trains[0].key_info.keys()
    # 组装车次信息
    for t in trains:
        tab.add_row(t.key_info.values())
    # 表格显示车次信息
    print(tab)


if __name__ == '__main__':
    test()



测试结果:

在这里插入图片描述

ok 以上就是12306余票查询第一篇实现,下一篇将介绍自动登录12306账号并进行下单操作,敬请期待哦~~~

创作不易,喜欢的话给喵喵赏点吧~(可怜眼神)
在这里插入图片描述

Python大神教你 】实现12306余票监控
12-14 2375
前言 由于经常会遇到没票等现象,所以需要使用软件进行抢票,但由于一些软件有优先级问题,对于不舍得花钱的我来讲,并不是很好的体验,所以想自己尝试写一个类似的功能。 环境/插件 Python3.6 urllib(用于请求数据) smtplib(发送邮件) 文件目录 GrabTicket文件夹 city.py(12306城市) GrabTicket.py(入口文件...
java实现火车票查询_java抓取12306火车余票信息
weixin_35598388的博客
02-16 683
最近在弄一个微信的公众帐号,涉及到火车票查询,之前用的网上找到的一个接口,但只能查到火车时刻表,12306又没有提供专门的查票的接口。今天突然想起自己直接去12306查询,抓取查询返回的数据包,这样就可以得到火车票的信息。这里就随笔记一下获取12306余票的过程。首先,我用firefox浏览器上12306查询余票。打开firefox的Web控制台,选上网络中的“记录请求和响应主体”然后输入地址日...
最新Python实现12306余票查询系统
ys707663989的博客
07-08 2455
首先感谢这篇博客的引导,但是这篇文章已经比较旧了,12306进行了改版,源码编排方式有了变化。12306源码获取的方法可以从这篇博客中学习,我在这里主要贴出对于目前最新的12306Python余票查询程序,可供用于学习Python的基本用法,正则表达的使用,简单爬虫的使用。下面是效果图,因为我用的是windows,对命令框里的代码着色比较麻烦,有兴趣的朋友可以自己尝试去给输出的文字添加颜色。 #
铁路局12306余票查询实现
weixin_30559481的博客
02-10 200
离上次写的类似于铁道部12306城市选择框的实现过了都快一个月了,最近一直在忙,在学习sharepoint2013,虽然早就实现12306余票查询,但是一直没抽出时间来写,刚好这几天也快放假了,抽点时间写一下,不然都要拖到年后了啊。。。 先来看一下条件输入窗口: 这里的出发地和目的地是之前提到的城市选择框,加上一个DateTimePicker和一个Button,就做的简陋一点了哈,对界...
手把手教你用python一键抢12306火车票(附代码)_python抢票
最新发布
2401_84009773的博客
04-22 430
方法负责发送短信通知。它使用"互亿无线"服务发送测试短信。它接收接收者的手机号码和短信内容作为参数,并返回从服务端收到的响应。大家都有所体会12306那种神级验证码,即使是聪明如你也不定每次都能把验证码找对找全。然而经过训练后的模型却是可以的,不得不感叹科技强大。当然该程序中并没有涉及到这一识别验证码的核心技术,它只是将这一工作丢给第三方若快平台去做,然后自身利用结果即可。那么若快是如何识别这种神级验证码呢?通过机器学习 训练所需要的模型?笔者在这方面所了解的较少,不能给过多解释。
手把手教你用python一键抢12306火车票(附代码)
热门推荐
qq_72290695的博客
06-25 3万+
代码哈喽,哈喽~,一年一度的抢火车票大战正式拉开序幕…然饿大多数人碰到的是这种情况:当你满心期待摩拳擦掌准备的时候,你会发现一票难求!想回趟家真难!那么作为程序猿的你,当然要用程序猿的方式来抢票!下面分享用python抢票!欢迎关注公众号:每日治愈系列,提供各种免费资源!也可以咨询代码问题哦!城市cookie可根据具体需求自行添加!此部分导入了代码所需的各种模块,用于实现不同的功能,包括正则表达式、网页浏览、时间操作、系统相关操作、HTTP连接、URL解析、发送电子邮件和短信等功能。这部分定义了。
python查询12306余票_【python】用GUI编写一个12306余票查询系统,附源码
weixin_39677106的博客
12-04 213
[Python] 纯文本查看 复制代码# -*- coding:utf-8 -*-import threadingimport requestsimport timefrom tkinter import *from tkinter.ttk import *from tkinter.messagebox import *class Application_ui(Frame):# 这个类仅实现界面生...
12306余票查询监控系统
09-23
包含整个项目的源代码,可以查询12306网站余票信息,如果有余票信息,就会对话框提醒。
监控火车票余票
abchkai的博客
10-12 1904
 这次教大家的是监控火车票余票,如果有票就报警提醒,让您不在为买不到火车票而担忧。 先看看我们要监控的页面以及使用的网页。 01网页预览.png (77 KB, 下载次数: 0) 下载附件 7 天前 上传 02软件预览.png (80.85 KB, 下载次数: 0) 下载附件 7 天前 上传 首先,我们以
python查询12306余票_Python爬虫----12306火车票余票查询
weixin_39751679的博客
12-04 349
12306火车票余票查询器文章同步更新:http://www.riba2534.cn/?p=305今天写了一个12306火车票余票查询器的爬虫,在这里记录一下过程.首先先看一下最终效果:比如想查9月2日从西安—北京动车和特快的余票tickets.py -dg 西安 北京 2017-09-02效果预览: 首先我们梳理一下用到的工具:Python3.x(必备)requests库,用来进行http请求的...
Python脚本实现12306火车票查询系统
12-23
最近我看到看到使用python实现火车票查询,我自己也实现了,感觉收获蛮多的,下面我就把每一步骤都详细给分享出来。(注意使用的是python3) 首先我将最终结果给展示出来: 在cmd命令行执行:python tickets.py -dk ...
python 12306 查询余票代码
12-21
基于Python12306余票查询,使用request模块,用cmd终端显示,并保存结果至txt文件
基于Python实现12306火车票查询系统源码(课程大作业).zip
12-29
基于Python实现12306火车票查询系统源码(课程大作业).zip基于Python实现12306火车票查询系统源码(课程大作业).zip基于Python实现12306火车票查询系统源码(课程大作业).zip基于Python实现12306火车票查询系统...
python实现12306火车票查询
12-25
12306火车票购票软件大家都用过,怎么用Python写一个命令行的火车票查看器,要求在命令行敲一行命令来获得你想要的火车票信息,下面通过本文学习吧。 Python火车票查询器 接口设置 先给这个小应用起个名字吧,...
利用Python实现命令行版的火车票查看器
09-21
当你想查询一下火车票信息的时候,你还在上12306官网吗?或是打开你手机里的APP?下面让我们来用Python写一个命令行版的火车票查看器, 只要在命令行敲一行命令就能获得你想要的火车票信息!如果你刚掌握了Python基础...
使用python脚本实现查询火车票工具
09-20
主要介绍了使用python脚本实现查询火车票工具,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
python火车票_python爬取12306火车余票程序(一)
weixin_39942637的博客
02-04 651
首先说一下大体的流程,简单的流程图如下:1、获取URL打开12306余票查询的 网页链接,浏览器(我用的chrome)按F12来分析请求。输入要查询的起始地点和时间后点击查询,可以看到右侧抓到的链接信息:这个Request URL便是我们需要的请求链接:Request URL:大体有以下四部分组成:(1)train_date:发车时间,注意格式是“yyyy-mm-dd”(2)from_stat...
12306火车票余票自动查询 Python selenium
JENHE的博客
01-17 906
12306火车票余票自动查询 Python selenium废话不多说,直接上代码 废话不多说,直接上代码 #!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Time : 2022/1/15 下午12:08 # @Author : H贤笙 # @File : 12306_info.py import json import time from captcha import * from selenium import webdriver fr
PYTHON实现12306余票查询-2018年3月7日有效
a583179的博客
03-17 1139
先开看下实现结果:源码:from prettytable import PrettyTable import re,time,requests,json with open(r'D:\PycharmProjects\12306\StationLib.txt', encoding='utf-8') as fp: patt = re.compile('\d+') data = pa...
python爬虫实现12306火车票查询
08-29
您可以使用Python的requests库和BeautifulSoup库来实现12306火车票查询的爬虫。以下是一个简单的示例代码: ```python import requests from bs4 import BeautifulSoup def search_train_tickets(from_station, to_station, date): # 构造URL url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT'.format(date, from_station, to_station) # 发送GET请求 response = requests.get(url) # 解析JSON数据 data = response.json() # 提取车次信息 train_list = data['data']['result'] # 输出车次信息 for train in train_list: train_info = train.split('|') print('车次:', train_info[3]) print('出发站:', train_info[6]) print('到达站:', train_info[7]) print('出发时间:', train_info[8]) print('到达时间:', train_info[9]) print('历时:', train_info[10]) print('----------------------------') # 示例用法 search_train_tickets('北京', '上海', '2022-01-01') ``` 这段代码首先构造了查询URL,然后发送GET请求获取到JSON格式的数据。接着使用BeautifulSoup库解析JSON数据,并提取出车次信息。最后,将车次信息打印出来。 请注意,12306网站有反爬机制,可能需要应对验证码或其他限制。此示例代码仅用于演示基本原理,具体实现可能需要根据实际情况进行调整和改进。

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

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

热门文章

  • 解决Navicat无法连接到MySQL的问题 118638
  • python小练习5:如何判断一个数能否被3整除 79050
  • python小练习1:给一个字符串,统计其中的数字、字母和其他类型字符的个数 52213
  • Python 第二版答案详解全集 49411
  • Appium使用教程(七)——获取appPackage和appActivity 49308

分类专栏

  • MySQL 4篇
  • Java 2篇
  • 接口测试 1篇
  • Python 28篇
  • 数据库工具及使用 8篇
  • Python Tip 整理 11篇
  • Linux命令学习 38篇
  • 杂谈 13篇
  • Python第二版教材答案 5篇
  • Python小练习 13篇
  • Python函数整理 17篇
  • Python简单实训 11篇
  • 爬虫实战 22篇
  • selenium 25篇
  • Python Web框架 3篇
  • Android 20篇
  • 测试工具 11篇
  • 性能测试 12篇
  • Flask 1篇
  • Django 14篇
  • 学习笔记 2篇
  • jenkins 5篇
  • JavaScript 1篇
  • 算法小练习 3篇
  • Spring Boot 5篇

最新评论

  • 解决Navicat无法连接到MySQL的问题

    饮溪.: 你好,我也是这样,请问你最后是怎么解决的呀,急用,望回复,非常感谢!

  • python对文件批量重命名

    weixin_54927438: thankyouverymuch

  • 程序员表白—3.8女神节

    2301_81536342: 怎么把那个Python里敲的代码转成文件格式发给好友呢

  • 解决Navicat无法连接到MySQL的问题

    昨夜小雨: https://huaweicloud.csdn.net/63355026d3efff3090b53f5e.html?spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-8-113923726-blog-119868006.235%5Ev38%5Epc_relevant_anti_t3_base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-8-113923726-blog-119868006.235%5Ev38%5Epc_relevant_anti_t3_base&utm_relevant_index=9 可以看看这篇博客

  • PythonTip(11~15)题详解

    努力学习学习: 14题不是要输出pythonz之美的中文吗

大家在看

  • 【机器学习】基于顺序到顺序Transformer机器翻译 272
  • 基于Python+Django的高校实验室管理系统设计与实现(源码+数据库+讲解)
  • 基于PHP的医院预约挂号系统设计与实现(lw+源码+数据库+讲解)
  • 基于PHP的校园二手市场信息发布系统设计与实现(lw+源码+数据库+讲解)
  • 基于Python+Django的智能水果销售系统设计与实现(源码+数据库+讲解)

最新文章

  • 谷歌Xpath-helper插件安装及使用
  • 用代码生成炫酷的词云图—《你好,李焕英》
  • 程序员表白—3.8女神节
2021年5篇
2020年11篇
2019年10篇
2018年45篇
2017年104篇
2016年96篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳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 网站制作 网站优化