爬虫之爬地铁数据

本文详细介绍了使用Python的BeautifulSoup库进行网络爬虫的基本步骤,包括获取网页信息、解析数据以及提取特定内容。以深圳地铁为例,展示了如何爬取地铁线路名称及时间,并通过find()和find_all()方法处理数据。最后,通过实践操作展示了如何爬取并整理深圳地铁线路的起止站点和运营时间。
摘要由CSDN通过智能技术生成


前言

主要是介绍爬取网页的基本步骤,面对对象编程,所以弄清楚返回的对象类型,可以调用相应的方法和属性。
参考原文:感谢原文作者提供的思路

一、爬取网页的基本步骤

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
在这里插入图片描述
#1 获取网页信息(str)
#2 将str转化为<class ‘bs4.BeautifulSoup’>对象(解析过程),从而提取数据(.find() 和 find_all())形成tag对象
#3 利用tag对象调用相应的方法和属性。
在这里插入图片描述

二、常见细节问题(返回的对象解释)

1、BeautifulSoup解析数据:

在这里插入图片描述
1)在括号中,要输入两个参数,第1个参数是要被解析的文本,注意了,它必须必须必须是字符串类型的值或者变量!!!
括号中的第2个参数用来标识解析器,我们要用的是一个Python内置库:html.parser(它不是唯一的解析器,但是相对来说比较简单。其他的还有’lxml’等)。
2)bs返回的数据类型(soup变量接收)是<class ‘bs4.BeautifulSoup’>,说明soup是一个BeautifulSoup对象。不过soup出来的源代码和我们之前使用response.text打印出来的源代码是完全一样的。也就是说,虽然我们使用了BeautifulSoup来解析数据,但从直观上来看,得到的结果竟然和没解析之前一样。
3)它们属于不同的类:<class ‘str’> 与<class ‘bs4.BeautifulSoup’>。前者是字符串,后者是已经被解析过的BeautifulSoup对象。之所以打印出来的是一样的文本,是因为BeautifulSoup对象在直接打印它的时候会调用该对象内的str方法,所以直接打印 bs 对象显示字符串是str的返回结果。
我们之后还会用BeautifulSoup库来提取数据,如果我们得到的结果是没有经过解析的,也就是说我们没有一个BeautifulSoup对象,是没法调用相关的属性和方法的

2、find()与find_all()

find()与find_all()是BeautifulSoup对象的两个方法,它们可以匹配HTML的标签和属性,把BeautifulSoup对象里符合要求的数据都提取出来。
在这里插入图片描述

1)它俩的用法基本是一样的,区别在于,find()只提取首个满足要求的数据,而find_all()提取出的是所有满足要求的数据。eg:在网页的HTML代码中,有三个

元素,用find()可以提取出首个元素,而find_all()可以提取出全部。
2)两者返回对象略微不同:
find()返回对象是<class ‘bs4.element.Tag’>,说明这是一个Tag类对象。
find_all()是<class ‘bs4.element.ResultSet’>,是一个ResultSet类的对象。其实是Tag对象以列表结构储存了起来,可以把它当做列表来处理。
3)find_all()返回的对象是一个list,即可以进行for遍历,对于遍历出的对象也是<class ‘bs4.element.Tag’>,是Tag对象,和find()返回对象一致。
在这里插入图片描述

3、Tag 对象

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

三、实践操作-爬取深圳地铁数据

1、爬取深圳的地铁数据(不包含时间)

import requests
import json
from bs4 import BeautifulSoup
import lxml.html
#将每个路线的链接找到
def get_urls():
    route_url={}
    route_list=[]
    url="https://dt.8684.cn/so.php?k=pp&dtcity=sz&q=wedwed"
    res=requests.get(url=url)
    soup=BeautifulSoup(res.content,"lxml").find(attrs={"class":"fs-fdLink"})
    route=soup.find("tr").find("td").find_all("a")
    route_name=[]
    start_time=[]
    end_time=[]
   
    for i in route:
        route_url={}
        route_url["key"]=i.text
        route_url["values"]="https://dt.8684.cn/"+i["href"]#tag对象,通过属性名进行取值
        route_list.append(route_url)
    return route_list
###########返回值:
[{'key': '1号线', 'values': 'https://dt.8684.cn//sz_x_e121ab3b'},
 {'key': '2号线(8号线)', 'values': 'https://dt.8684.cn//sz_x_0bb46835'},
 {'key': '3号线', 'values': 'https://dt.8684.cn//sz_x_668b4fd2'},
 {'key': '4号线', 'values': 'https://dt.8684.cn//sz_x_2e0b72d2'},
 {'key': '5号线', 'values': 'https://dt.8684.cn//sz_x_902c071b'},
 {'key': '6号线', 'values': 'https://dt.8684.cn//sz_x_eba33b86'},
 {'key': '7号线', 'values': 'https://dt.8684.cn//sz_x_7dacbea3'},
 {'key': '9号线', 'values': 'https://dt.8684.cn//sz_x_4dba0a29'},
 {'key': '10号线', 'values': 'https://dt.8684.cn//sz_x_40e26542'},
 {'key': '11号线', 'values': 'https://dt.8684.cn//sz_x_2e25af6a'},
 ################################
 #只保留站的名字,不要时间:
def get_schedule_name(dic):
    all_data=requests.get(dic["values"])
    soup=BeautifulSoup(all_data.content,"lxml").find(attrs={"class":"pi-table tl-table"})
    #soup的数据类型是<class 'bs4.BeautifulSoup'>,
    """all_stations是<class 'bs4.element.ResultSet'>,是一个ResultSet类的对象。其实是Tag对象以列表结构储存了起来,可以把它当做列表来处理。
    但是如果是通过find()找到一个元素,则返回是<class 'bs4.element.Tag'>,说明这是一个Tag类对象"""
    all_stations=soup.find("tbody").find_all("tr")#既然是列表,就可以进行遍历:
    route_list=[]
    route_infor_nei={}#形成内环列表
    route_infor_wai={}#形成外环列表
    if (dic["key"].find("内圈")==-1 and dic["key"].find("外圈")==-1):#如果路线中不存在内圈和外圈字样:
        route_infor_nei["name"]=dic["key"]+"内环"
        route_infor_wai["name"]=dic["key"]+"外环"
        station_list=[]
        for i in all_stations:
            if i!=[]:
                routes=i.find_all("td")
                if routes !=[]:
                    station_list.append(routes[0].text)
        #内外环线增加路线:
        route_infor_nei["stations"]=station_list
        route_infor_wai["stations"]=list(reversed(station_list))
        route_list.append(route_infor_nei)
        route_list.append(route_infor_wai)
        
    else:#如果存在内外圈字样:
        route_infor["name"]=dic["key"]
        station_list=[]
        for i in all_stations:
            if i!=[]:
                route=i.find_all("td")#返回是一个list
                if route!=[]:
                    station_list.append(route[0].text)
            
        #内外环线增加路线:
        route_infor["stations"]=station_list
        route_list.append(route_infor)
        
        
    return route_list
  #整合数据:
  for i in get_urls():
    for j in get_schedule_name(i):
        print(json_str)#不用json.dumps()也可以,因为内外环线组合是一个list,遍历出来即可。
##############################结果:
{"name": "1号线内环", "stations": ["罗湖", "国贸", "老街", "大剧院", "科学馆", "华强路", "岗厦", "会展中心", "购物公园", "香蜜湖", "车公庙", "竹子林", "侨城东", "华侨城", "世界之窗", "白石洲", "高新园", "深大", "桃园", "大新", "鲤鱼门", "前海湾", "新安", "宝安中心", "宝体", "坪洲", "西乡", "固戍", "后瑞", "机场东"]}
{"name": "1号线外环", "stations": ["机场东", "后瑞", "固戍", "西乡", "坪洲", "宝体", "宝安中心", "新安", "前海湾", "鲤鱼门", "大新", "桃园", "深大", "高新园", "白石洲", "世界之窗", "华侨城", "侨城东", "竹子林", "车公庙", "香蜜湖", "购物公园", "会展中心", "岗厦", "华强路", "科学馆", "大剧院", "老街", "国贸", "罗湖"]}
{"name": "2号线(8号线)内环", "stations": ["赤湾", "蛇口港", "海上世界", "水湾", "东角头", "湾厦", "海月", "登良", "后海", "科苑", "红树湾", "世界之窗", "侨城北", "深康", "安托山", "侨香", "香蜜", "香梅北", "景田", "莲花西", "福田", "市民中心", "岗厦北", "华强北", "燕南", "大剧院", "湖贝", "黄贝岭", "新秀", "莲塘口岸", "仙湖路", "莲塘", "梧桐山南", "沙头角", "海山", "盐田港西", "深外高中", "盐田路"]}
{"name": "2号线(8号线)外环", "stations": ["盐田路", "深外高中", "盐田港西", "海山", "沙头角", "梧桐山南", "莲塘", "仙湖路", "莲塘口岸", "新秀", "黄贝岭", "湖贝", "大剧院", "燕南", "华强北", "岗厦北", "市民中心", "福田", "莲花西", "景田", "香梅北", "香蜜", "侨香", "安托山", "深康", "侨城北", "世界之窗", "红树湾", "科苑", "后海", "登良", "海月", "湾厦", "东角头", "水湾", "海上世界", "蛇口港", "赤湾"]}
{"name": "3号线内环", "stations": ["福保", "益田", "石厦", "购物公园", "福田", "少年宫", "莲花村", "华新", "通新岭", "红岭", "老街", "晒布", "翠竹", "田贝", "水贝", "草埔", "布吉", "木棉湾", "大芬", "丹竹头", "六约", "塘坑", "横岗", "永湖", "荷坳", "大运", "爱联", "吉祥", "龙城广场", "南联", "双龙"]}
{"name": "3号线外环", "stations": ["双龙", "南联", "龙城广场", "吉祥", "爱联", "大运", "荷坳", "永湖", "横岗", "塘坑", "六约", "丹竹头", "大芬", "木棉湾", "布吉", "草埔", "水贝", "田贝", "翠竹", "晒布", "老街", "红岭", "通新岭", "华新", "莲花村", "少年宫", "福田", "购物公园", "石厦", "益田", "福保"]}
{"name": "4号线内环", "stations": ["牛湖", "观澜湖", "松元厦", "观澜", "长湖", "茜坑", "竹村", "清湖北", "清湖", "龙华", "龙胜", "上塘", "红山", "深圳北站", "白石龙", "民乐", "上梅林", "莲花北", "少年宫", "市民中心", "会展中心", "福民", "福田口岸"]}
{"name": "4号线外环", "stations": ["福田口岸", "福民", "会展中心", "市民中心", "少年宫", "莲花北", "上梅林", "民乐", "白石龙", "深圳北站", "红山", "上塘", "龙胜", "龙华", "清湖", "清湖北", "竹村", "茜坑", "长湖", "观澜", "松元厦", "观澜湖", "牛湖"]}
{"name": "5号线内环", "stations": ["黄贝岭", "怡景", "太安", "布心", "百鸽笼", "布吉", "长龙", "下水径", "上水径", "杨美", "坂田", "五和", "民治", "深圳北站", "长岭陂", "塘朗", "大学城", "西丽", "留仙洞", "兴东", "洪浪北", "灵芝", "翻身", "宝安中心", "宝华", "临海", "前海湾", "桂湾", "前湾", "前湾公园", "妈湾", "铁路公园", "荔湾", "赤湾"]}
{"name": "5号线外环", "stations": ["赤湾", "荔湾", "铁路公园", "妈湾", "前湾公园", "前湾", "桂湾", "前海湾", "临海", "宝华", "宝安中心", "翻身", "灵芝", "洪浪北", "兴东", "留仙洞", "西丽", "大学城", "塘朗", "长岭陂", "深圳北站", "民治", "五和", "坂田", "杨美", "上水径", "下水径", "长龙", "布吉", "百鸽笼", "布心", "太安", "怡景", "黄贝岭"]}
{"name": "6号线内环", "stations": ["松岗", "溪头", "松岗公园", "薯田埔", "合水口", "公明广场", "红花山", "楼村", "科学公园", "光明", "光明大街", "凤凰城", "长圳", "上屋", "官田", "阳台山东", "元芬", "上芬", "红山", "深圳北站", "梅林关", "翰岭", "银湖", "八卦岭", "体育中心", "通新岭", "科学馆"]}
{"name": "6号线外环", "stations": ["科学馆", "通新岭", "体育中心", "八卦岭", "银湖", "翰岭", "梅林关", "深圳北站", "红山", "上芬", "元芬", "阳台山东", "官田", "上屋", "长圳", "凤凰城", "光明大街", "光明", "科学公园", "楼村", "红花山", "公明广场", "合水口", "薯田埔", "松岗公园", "溪头", "松岗"]}
{"name": "7号线内环", "stations": ["西丽湖", "西丽", "茶光", "珠光", "龙井", "桃源村", "深云", "安托山", "农林", "车公庙", "上沙", "沙尾", "石厦", "皇岗村", "福民", "皇岗口岸", "赤尾", "华强南", "华强北", "华新", "黄木岗", "八卦岭", "红岭北", "笋岗", "洪湖", "田贝", "太安"]}
{"name": "7号线外环", "stations": ["太安", "田贝", "洪湖", "笋岗", "红岭北", "八卦岭", "黄木岗", "华新", "华强北", "华强南", "赤尾", "皇岗口岸", "福民", "皇岗村", "石厦", "沙尾", "上沙", "车公庙", "农林", "安托山", "深云", "桃源村", "龙井", "珠光", "茶光", "西丽", "西丽湖"]}
{"name": "9号线内环", "stations": ["前湾", "梦海", "怡海", "荔林", "南油西", "南油", "南山书城", "深大南", "粤海门", "高新南", "红树湾南", "深湾", "深圳湾公园", "下沙", "车公庙", "香梅", "景田", "梅景", "下梅林", "梅村", "上梅林", "孖岭", "银湖", "泥岗", "红岭北", "园岭", "红岭", "红岭南", "鹿丹村", "人民南", "向西村", "文锦"]}
{"name": "9号线外环", "stations": ["文锦", "向西村", "人民南", "鹿丹村", "红岭南", "红岭", "园岭", "红岭北", "泥岗", "银湖", "孖岭", "上梅林", "梅村", "下梅林", "梅景", "景田", "香梅", "车公庙", "下沙", "深圳湾公园", "深湾", "红树湾南", "高新南", "粤海门", "深大南", "南山书城", "南油", "南油西", "荔林", "怡海", "梦海", "前湾"]}
{"name": "10号线内环", "stations": ["福田口岸", "福民", "岗厦", "莲花村", "冬瓜岭", "孖岭", "雅宝", "南坑", "光雅园", "五和", "坂田北", "贝尔路", "华为", "岗头", "雪象", "甘坑", "凉帽山", "上李朗", "木古", "华南城", "禾花", "平湖", "双拥街"]}
{"name": "10号线外环", "stations": ["双拥街", "平湖", "禾花", "华南城", "木古", "上李朗", "凉帽山", "甘坑", "雪象", "岗头", "华为", "贝尔路", "坂田北", "五和", "光雅园", "南坑", "雅宝", "孖岭", "冬瓜岭", "莲花村", "岗厦", "福民", "福田口岸"]}
{"name": "11号线内环", "stations": ["福田", "车公庙", "红树湾南", "后海", "南山", "前海湾", "宝安", "碧海湾", "机场", "机场北", "福永", "桥头", "塘尾", "马安山", "沙井", "后亭", "松岗", "碧头"]}
{"name": "11号线外环", "stations": ["碧头", "松岗", "后亭", "沙井", "马安山", "塘尾", "桥头", "福永", "机场北", "机场", "碧海湾", "宝安", "前海湾", "南山", "后海", "红树湾南", "车公庙", "福田"]}
{"name": "20号线内环", "stations": ["机场北", "国展南", "国展", "国展北", "会展城"]}
{"name": "20号线外环", "stations": ["会展城", "国展北", "国展", "国展南", "机场北"]}

        

2、爬取深圳地铁数据(包含时间)

import requests
import json
from bs4 import BeautifulSoup
import lxml.html
#将每个路线的链接找到
def get_urls():
    route_url={}
    route_list=[]
    url="https://dt.8684.cn/so.php?k=pp&dtcity=sz&q=wedwed"
    res=requests.get(url=url)
    soup=BeautifulSoup(res.content,"lxml").find(attrs={"class":"fs-fdLink"})
    route=soup.find("tr").find("td").find_all("a")
    route_name=[]
    start_time=[]
    end_time=[]
   
    for i in route:
        route_url={}
        route_url["key"]=i.text
        route_url["values"]="https://dt.8684.cn/"+i["href"]#tag对象,通过属性名进行取值
        route_list.append(route_url)
    return route_list
###########返回值:
[{'key': '1号线', 'values': 'https://dt.8684.cn//sz_x_e121ab3b'},
 {'key': '2号线(8号线)', 'values': 'https://dt.8684.cn//sz_x_0bb46835'},
 {'key': '3号线', 'values': 'https://dt.8684.cn//sz_x_668b4fd2'},
 {'key': '4号线', 'values': 'https://dt.8684.cn//sz_x_2e0b72d2'},
 {'key': '5号线', 'values': 'https://dt.8684.cn//sz_x_902c071b'},
 {'key': '6号线', 'values': 'https://dt.8684.cn//sz_x_eba33b86'},
 {'key': '7号线', 'values': 'https://dt.8684.cn//sz_x_7dacbea3'},
 {'key': '9号线', 'values': 'https://dt.8684.cn//sz_x_4dba0a29'},
 {'key': '10号线', 'values': 'https://dt.8684.cn//sz_x_40e26542'},
 {'key': '11号线', 'values': 'https://dt.8684.cn//sz_x_2e25af6a'},
 ################################
 def get_schedule(dic):
    all_data=requests.get(dic["values"])
    soup=BeautifulSoup(all_data.content,"lxml").find(attrs={"class":"pi-table tl-table"})
    #soup的数据类型是<class 'bs4.BeautifulSoup'>,
    """all_stations是<class 'bs4.element.ResultSet'>,是一个ResultSet类的对象。其实是Tag对象以列表结构储存了起来,可以把它当做列表来处理。
    但是如果是通过find()找到一个元素,则返回是<class 'bs4.element.Tag'>,说明这是一个Tag类对象"""
    all_stations=soup.find("tbody").find_all("tr")#既然是列表,就可以进行遍历:
    route_list=[]
    route_infor_nei={}#形成内环列表
    route_infor_wai={}#形成外环列表
    if (dic["key"].find("内圈")==-1 and dic["key"].find("外圈")==-1):#如果路线中不存在内圈和外圈字样:
        route_infor_nei["name"]=dic["key"]+"内环"
        route_infor_wai["name"]=dic["key"]+"外环"
        station_list=[]
        time_NH_1=[]
        time_NH_2=[]
        time_WH_1=[]
        time_WH_2=[]
        for i in all_stations:
            if i!=[]:
                route=i.find_all("td")#返回是一个list
                if j!=[]:
                    station_list.append(route[0].text)
                    time_NH_1.append(route[1].text)#内环发车时间
                    time_NH_2.append(route[3].text)#内环收车时间即末班车时间
                    time_WH_1.append(route[2].text)#外环发车时间
                    time_WH_2.append(route[4].text)#外环末班车时间(即收车)
        try: 
            if time_NH_1[0]!="--" and time_NH_1[0]!="—":
                route_infor_nei["start-time"]=time_nei_1[0]#内环线增加起始时间(直接否定为主--极端)
            else:
                route_infor_nei["start-time"]=time_nei_1ime[1]
            if time_nei_2[-1]!="--" and time_nei_2[-1]!="—":
                route_infor_nei["end-time"]=time_nei_2[-1]#内环线增加结束时间
            else:
                route_infor_nei["end-time"]=time_nei_2[-2]
            if time_wai_1[-1]!="--" and time_wai_1[-1]!="—":
                route_infor_wai["start-time"]=time_wai_1[-1]#外环线增加起始时间
            else:
                route_infor_wai["start-time"]=time_wai_1[-2]
            if time_wai_1[0]!="--" and time_wai_1[0]!="—":
                 route_infor_wai["end-time"]=time_wai_2[0]#外环线增加结束时间
            else:
                route_infor_wai["end-time"]=time_wai_2[1]#外环线增加结束时间  
        except Indexerror as e:
            route_infor_nei["start-time"]="6:30"
            route_infor_nei["end-time"]="23:00"
            route_infor_wai["start-time"]="6:30"
            route_infor_wai["end-time"]="23:00"
        #内外环线增加路线:
        route_infor_nei["stations"]=station_list
        route_infor_wai["stations"]=list(reversed(station_list))
        route_list.append(route_infor_nei)
        route_list.append(route_infor_wai)
    else:#如果存在内外圈字样:
        route_infor["name"]=dic["key"]
        station_list=[]
        time_1=[]#一条路线确定内环或外环后就只有2个时间,发车和收车
        time_2=[]
        
        for i in all_stations:
            if i!=[]:
                route=i.find_all("td")#返回是一个list
                if j!=[]:
                    station_list.append(route[0].text)
                    time_1.append(route[1].text)#发车时间
                    time_2.append(route[2].text)#收车时间即末班车时间
                    
        try: 
            if time_1[0]!="--" and time_1[0]!="—":
                route_infor["start-time"]=time_nei_1[0]#该环线发车时间
            else:
                route_infor["start-time"]=time_nei_1ime[1]
            if time_1[-1]!="--" and time_2[-1]!="—":
                route_infor["end-time"]=time_nei_2[-1]#该环线收车时间
            else:
                route_infor["end-time"]=time_nei_2[-2]
              
        except Indexerror as e:
            route_infor["start-time"]="6:30"
            route_infor["end-time"]="23:00"
            
        #内外环线增加路线:
        route_infor["stations"]=station_list
        route_list.append(route_infor)
        
        
    return route_list
##整合两个函数--调用数据:        
for i in get_urls():
    for j in get_schedule(i):
        json_str = json.dumps(j, ensure_ascii=False)
#转换数据格式为json格式,忽略格式转换错误进行强制转换
        print(json_str)        
########################最终返回结果
{"name": "1号线内环", "start-time": "06:30", "end-time": "00:04", "stations": ["罗湖", "国贸", "老街", "大剧院", "科学馆", "华强路", "岗厦", "会展中心", "购物公园", "香蜜湖", "车公庙", "竹子林", "侨城东", "华侨城", "世界之窗", "白石洲", "高新园", "深大", "桃园", "大新", "鲤鱼门", "前海湾", "新安", "宝安中心", "宝体", "坪洲", "西乡", "固戍", "后瑞", "机场东"]}
{"name": "1号线外环", "start-time": "06:30", "end-time": "00:06", "stations": ["机场东", "后瑞", "固戍", "西乡", "坪洲", "宝体", "宝安中心", "新安", "前海湾", "鲤鱼门", "大新", "桃园", "深大", "高新园", "白石洲", "世界之窗", "华侨城", "侨城东", "竹子林", "车公庙", "香蜜湖", "购物公园", "会展中心", "岗厦", "华强路", "科学馆", "大剧院", "老街", "国贸", "罗湖"]}
{"name": "2号线(8号线)内环", "start-time": "06:30", "end-time": "00:04", "stations": ["赤湾", "蛇口港", "海上世界", "水湾", "东角头", "湾厦", "海月", "登良", "后海", "科苑", "红树湾", "世界之窗", "侨城北", "深康", "安托山", "侨香", "香蜜", "香梅北", "景田", "莲花西", "福田", "市民中心", "岗厦北", "华强北", "燕南", "大剧院", "湖贝", "黄贝岭", "新秀", "莲塘口岸", "仙湖路", "莲塘", "梧桐山南", "沙头角", "海山", "盐田港西", "深外高中", "盐田路"]}
{"name": "2号线(8号线)外环", "start-time": "06:30", "end-time": "00:06", "stations": ["盐田路", "深外高中", "盐田港西", "海山", "沙头角", "梧桐山南", "莲塘", "仙湖路", "莲塘口岸", "新秀", "黄贝岭", "湖贝", "大剧院", "燕南", "华强北", "岗厦北", "市民中心", "福田", "莲花西", "景田", "香梅北", "香蜜", "侨香", "安托山", "深康", "侨城北", "世界之窗", "红树湾", "科苑", "后海", "登良", "海月", "湾厦", "东角头", "水湾", "海上世界", "蛇口港", "赤湾"]}
{"name": "3号线内环", "start-time": "06:30", "end-time": "00:04", "stations": ["福保", "益田", "石厦", "购物公园", "福田", "少年宫", "莲花村", "华新", "通新岭", "红岭", "老街", "晒布", "翠竹", "田贝", "水贝", "草埔", "布吉", "木棉湾", "大芬", "丹竹头", "六约", "塘坑", "横岗", "永湖", "荷坳", "大运", "爱联", "吉祥", "龙城广场", "南联", "双龙"]}
{"name": "3号线外环", "start-time": "06:30", "end-time": "00:06", "stations": ["双龙", "南联", "龙城广场", "吉祥", "爱联", "大运", "荷坳", "永湖", "横岗", "塘坑", "六约", "丹竹头", "大芬", "木棉湾", "布吉", "草埔", "水贝", "田贝", "翠竹", "晒布", "老街", "红岭", "通新岭", "华新", "莲花村", "少年宫", "福田", "购物公园", "石厦", "益田", "福保"]}
{"name": "4号线内环", "start-time": "06:30", "end-time": "00:04", "stations": ["牛湖", "观澜湖", "松元厦", "观澜", "长湖", "茜坑", "竹村", "清湖北", "清湖", "龙华", "龙胜", "上塘", "红山", "深圳北站", "白石龙", "民乐", "上梅林", "莲花北", "少年宫", "市民中心", "会展中心", "福民", "福田口岸"]}
{"name": "4号线外环", "start-time": "06:30", "end-time": "00:06", "stations": ["福田口岸", "福民", "会展中心", "市民中心", "少年宫", "莲花北", "上梅林", "民乐", "白石龙", "深圳北站", "红山", "上塘", "龙胜", "龙华", "清湖", "清湖北", "竹村", "茜坑", "长湖", "观澜", "松元厦", "观澜湖", "牛湖"]}
{"name": "5号线内环", "start-time": "06:30", "end-time": "00:04", "stations": ["黄贝岭", "怡景", "太安", "布心", "百鸽笼", "布吉", "长龙", "下水径", "上水径", "杨美", "坂田", "五和", "民治", "深圳北站", "长岭陂", "塘朗", "大学城", "西丽", "留仙洞", "兴东", "洪浪北", "灵芝", "翻身", "宝安中心", "宝华", "临海", "前海湾", "桂湾", "前湾", "前湾公园", "妈湾", "铁路公园", "荔湾", "赤湾"]}
{"name": "5号线外环", "start-time": "06:30", "end-time": "00:06", "stations": ["赤湾", "荔湾", "铁路公园", "妈湾", "前湾公园", "前湾", "桂湾", "前海湾", "临海", "宝华", "宝安中心", "翻身", "灵芝", "洪浪北", "兴东", "留仙洞", "西丽", "大学城", "塘朗", "长岭陂", "深圳北站", "民治", "五和", "坂田", "杨美", "上水径", "下水径", "长龙", "布吉", "百鸽笼", "布心", "太安", "怡景", "黄贝岭"]}
{"name": "6号线内环", "start-time": "06:30", "end-time": "00:04", "stations": ["松岗", "溪头", "松岗公园", "薯田埔", "合水口", "公明广场", "红花山", "楼村", "科学公园", "光明", "光明大街", "凤凰城", "长圳", "上屋", "官田", "阳台山东", "元芬", "上芬", "红山", "深圳北站", "梅林关", "翰岭", "银湖", "八卦岭", "体育中心", "通新岭", "科学馆"]}
{"name": "6号线外环", "start-time": "06:30", "end-time": "00:06", "stations": ["科学馆", "通新岭", "体育中心", "八卦岭", "银湖", "翰岭", "梅林关", "深圳北站", "红山", "上芬", "元芬", "阳台山东", "官田", "上屋", "长圳", "凤凰城", "光明大街", "光明", "科学公园", "楼村", "红花山", "公明广场", "合水口", "薯田埔", "松岗公园", "溪头", "松岗"]}
{"name": "7号线内环", "start-time": "06:30", "end-time": "00:04", "stations": ["西丽湖", "西丽", "茶光", "珠光", "龙井", "桃源村", "深云", "安托山", "农林", "车公庙", "上沙", "沙尾", "石厦", "皇岗村", "福民", "皇岗口岸", "赤尾", "华强南", "华强北", "华新", "黄木岗", "八卦岭", "红岭北", "笋岗", "洪湖", "田贝", "太安"]}
{"name": "7号线外环", "start-time": "06:30", "end-time": "00:06", "stations": ["太安", "田贝", "洪湖", "笋岗", "红岭北", "八卦岭", "黄木岗", "华新", "华强北", "华强南", "赤尾", "皇岗口岸", "福民", "皇岗村", "石厦", "沙尾", "上沙", "车公庙", "农林", "安托山", "深云", "桃源村", "龙井", "珠光", "茶光", "西丽", "西丽湖"]}
{"name": "9号线内环", "start-time": "06:30", "end-time": "00:04", "stations": ["前湾", "梦海", "怡海", "荔林", "南油西", "南油", "南山书城", "深大南", "粤海门", "高新南", "红树湾南", "深湾", "深圳湾公园", "下沙", "车公庙", "香梅", "景田", "梅景", "下梅林", "梅村", "上梅林", "孖岭", "银湖", "泥岗", "红岭北", "园岭", "红岭", "红岭南", "鹿丹村", "人民南", "向西村", "文锦"]}
{"name": "9号线外环", "start-time": "06:30", "end-time": "00:06", "stations": ["文锦", "向西村", "人民南", "鹿丹村", "红岭南", "红岭", "园岭", "红岭北", "泥岗", "银湖", "孖岭", "上梅林", "梅村", "下梅林", "梅景", "景田", "香梅", "车公庙", "下沙", "深圳湾公园", "深湾", "红树湾南", "高新南", "粤海门", "深大南", "南山书城", "南油", "南油西", "荔林", "怡海", "梦海", "前湾"]}
{"name": "10号线内环", "start-time": "06:30", "end-time": "00:04", "stations": ["福田口岸", "福民", "岗厦", "莲花村", "冬瓜岭", "孖岭", "雅宝", "南坑", "光雅园", "五和", "坂田北", "贝尔路", "华为", "岗头", "雪象", "甘坑", "凉帽山", "上李朗", "木古", "华南城", "禾花", "平湖", "双拥街"]}
{"name": "10号线外环", "start-time": "06:30", "end-time": "00:06", "stations": ["双拥街", "平湖", "禾花", "华南城", "木古", "上李朗", "凉帽山", "甘坑", "雪象", "岗头", "华为", "贝尔路", "坂田北", "五和", "光雅园", "南坑", "雅宝", "孖岭", "冬瓜岭", "莲花村", "岗厦", "福民", "福田口岸"]}
{"name": "11号线内环", "start-time": "06:30", "end-time": "00:04", "stations": ["福田", "车公庙", "红树湾南", "后海", "南山", "前海湾", "宝安", "碧海湾", "机场", "机场北", "福永", "桥头", "塘尾", "马安山", "沙井", "后亭", "松岗", "碧头"]}
{"name": "11号线外环", "start-time": "06:30", "end-time": "00:06", "stations": ["碧头", "松岗", "后亭", "沙井", "马安山", "塘尾", "桥头", "福永", "机场北", "机场", "碧海湾", "宝安", "前海湾", "南山", "后海", "红树湾南", "车公庙", "福田"]}
{"name": "20号线内环", "start-time": "06:30", "end-time": "00:04", "stations": ["机场北", "国展南", "国展", "国展北", "会展城"]}
{"name": "20号线外环", "start-time": "06:30", "end-time": "00:06", "stations": ["会展城", "国展北", "国展", "国展南", "机场北"]}        
    

总结

1 网页找内容(找不同(只找一个);找相同(找一类)

2 根据返回对象不同,调用不同的方法和属性

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值