爬虫之爬地铁数据


前言

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

一、爬取网页的基本步骤

示例: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 根据返回对象不同,调用不同的方法和属性

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值